站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题大侠显身帮忙啊!解决问题要给粉的!

大侠显身帮忙啊!解决问题要给粉的!

摘要: 大侠显身帮忙啊!解决问题要给粉的!


各位帮个忙啊
我想得到任意时间段的天数怎摸办啊
比如这样的
2005-08-07 到 2006-01-02这之间的天数怎摸算啊
大侠显身帮忙啊!!!



这之间东东好多的
比如跨的月份不同和跨年不同!
好麻烦的!


算法:先把两个日期转化为毫秒,再相减,最后除以一天的毫秒数,查API都有方法的


import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;

/*
* Created on 2006-8-11
*
*/

/**
* @author zhuzf
*
*/
public class DateUtil {
// 定义比较日期的类型
public final static int ERROR = -1000;
public final static int ON_DAY = 1;
public final static int ON_MONTH = 2;
public final static int ON_YEAR = 3;
public final static int ON_HOUR = 4;
public final static int ON_MINUTE = 5;
public final static int ON_SECOND = 6;
public final static int ON_SYSTEM = 7;

// 定义日期常量
public final static int YEAR_MONTHS = 12;
public final static int DAY_HOURS = 24;
public final static int HOUR_MINUTES = 60;
public final static int MINUTE_SECONDS = 60;
/**
* 根据比较深度来比较两个日期,并且按比较深度返回d1-d2
*
* @param d1 Date
* @param d2 Date
* @param scope int 比较级别
* @return long
*/
public static long compareDate(Date d1, Date d2, int scope) {
switch (scope) {
case ON_YEAR:
return compareDateOnYear(d1, d2);
case ON_MONTH:
return compareDateOnMonth(d1, d2);
case ON_DAY:
return compareDateOnDay(d1, d2);
case ON_HOUR:
return compareDateOnHour(d1, d2);
case ON_MINUTE:
return compareDateOnMinute(d1, d2);
case ON_SECOND:
return compareDateOnSecond(d1, d2);
case ON_SYSTEM:
return compareDateOnSystem(d1, d2);
default:
return ERROR;
}
}


/**
* 比较两个日期的年份差距
*
* @param d1 Date
* @param d2 Date
* @return int
*/
public static int compareDateOnYear(Date d1, Date d2) {
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(d1);
c2.setTime(d2);
int y1 = c1.get(Calendar.YEAR);
int y2 = c2.get(Calendar.YEAR);
return y1 - y2;
}

/**
* 比较两个日期在月份上的差距
*
* @param d1 Date
* @param d2 Date
* @return int
*/
public static int compareDateOnMonth(Date d1, Date d2) {
if (d1.getTime() == d2.getTime()) {
return 0; // 日期相同返回0
}
int flag = -1;
// 比较两个日期使日期较小的日期排在前面
if (d1.getTime() > d2.getTime()) { // 日期一在日期二之后
Date temp = d1;
d1 = d2;
d2 = temp;
flag = 1;
}
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(d1);
c2.setTime(d2);
int y1 = c1.get(Calendar.YEAR);
int y2 = c2.get(Calendar.YEAR);
int mon1 = c1.get(Calendar.MONTH);
int mon2 = c2.get(Calendar.MONTH);
int mons = 0;
for (int i = 1; i <= y2 - y1; i++) {
mons += YEAR_MONTHS; // 一年有12个月
}
return (mons - mon1 + mon2) * flag;
}

/**
* 比较两个日期并返回两个日期相差多少天(d1-d2)
*
* @param d1 Date
* @param d2 Date
* @return int
*/
public static int compareDateOnDay(Date d1, Date d2) {
if (d1.getTime() == d2.getTime()) {
return 0; // 日期相同返回0
}
int flag = -1;
// 比较两个日期使日期较小的日期排在前面
if (d1.getTime() > d2.getTime()) { // 日期一在日期二之后
Date temp = d1;
d1 = d2;
d2 = temp;
flag = 1;
}
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(d1);
c2.setTime(d2);
int y1 = c1.get(Calendar.YEAR);
int y2 = c2.get(Calendar.YEAR);
int day1 = c1.get(Calendar.DAY_OF_YEAR);
int day2 = c2.get(Calendar.DAY_OF_YEAR);
int days = 0;
for (int i = 1; i <= y2 - y1; i++) {
days += getYearDays(y1);
}
return (days - day1 + day2) * flag;
}




public static long compareDateOnHour(Date d1, Date d2) {
if (d1.getTime() == d2.getTime()) {
return 0; // 日期相同返回0
}
int flag = -1; // d1 // 比较两个日期使日期较小的日期排在前面
if (d1.getTime() > d2.getTime()) { // 日期一在日期二之后
Date temp = d1;
d1 = d2;
d2 = temp;
flag = 1;
}
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(d1);
c2.setTime(d2);
int y1 = c1.get(Calendar.YEAR);
int y2 = c2.get(Calendar.YEAR);
int day1 = c1.get(Calendar.DAY_OF_YEAR);
int day2 = c2.get(Calendar.DAY_OF_YEAR);
int days = 0;
for (int i = 1; i <= y2 - y1; i++) {
days += getYearDays(y1);
}
days = (days - day1 + day2);
int h1 = c1.get(Calendar.HOUR_OF_DAY);
int h2 = c2.get(Calendar.HOUR_OF_DAY);
return (days * DAY_HOURS - h1 + h2) * flag;
}

public static long compareDateOnMinute(Date d1, Date d2) {
if (d1.getTime() == d2.getTime()) {
return 0; // 日期相同返回0
}
int flag = -1; // d1 // 比较两个日期使日期较小的日期排在前面
if (d1.getTime() > d2.getTime()) { // 日期一在日期二之后
Date temp = d1;
d1 = d2;
d2 = temp;
flag = 1;
}
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(d1);
c2.setTime(d2);
int y1 = c1.get(Calendar.YEAR);
int y2 = c2.get(Calendar.YEAR);
int day1 = c1.get(Calendar.DAY_OF_YEAR);
int day2 = c2.get(Calendar.DAY_OF_YEAR);
int days = 0;
for (int i = 1; i <= y2 - y1; i++) {
days += getYearDays(y1);
}
days = (days - day1 + day2);
int h1 = c1.get(Calendar.HOUR_OF_DAY);
int h2 = c2.get(Calendar.HOUR_OF_DAY);
long hours = days * DAY_HOURS - h1 + h2;
int m1 = c1.get(Calendar.MINUTE);
int m2 = c2.get(Calendar.MINUTE);
return (hours * HOUR_MINUTES - m1 + m2) * flag;
}

public static long compareDateOnSecond(Date d1, Date d2) {
if (d1.getTime() == d2.getTime()) {
return 0; // 日期相同返回0
}
int flag = -1; // d1 // 比较两个日期使日期较小的日期排在前面
if (d1.getTime() > d2.getTime()) { // 日期一在日期二之后
Date temp = d1;
d1 = d2;
d2 = temp;
flag = 1;
}
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(d1);
c2.setTime(d2);
int y1 = c1.get(Calendar.YEAR);
int y2 = c2.get(Calendar.YEAR);
int day1 = c1.get(Calendar.DAY_OF_YEAR);
int day2 = c2.get(Calendar.DAY_OF_YEAR);
int days = 0;
for (int i = 1; i <= y2 - y1; i++) {
days += getYearDays(y1);
}
days = (days - day1 + day2);
int h1 = c1.get(Calendar.HOUR_OF_DAY);
int h2 = c2.get(Calendar.HOUR_OF_DAY);
long hours = days * DAY_HOURS - h1 + h2;
int m1 = c1.get(Calendar.MINUTE);
int m2 = c2.get(Calendar.MINUTE);
long minutes = hours * HOUR_MINUTES - m1 + m2;
int s1 = c1.get(Calendar.SECOND);
int s2 = c2.get(Calendar.SECOND);
return (minutes * MINUTE_SECONDS - s1 + s2) * flag;
}
public static int compareDateOnSystem(Date d1, Date d2) {
return (int) (d1.getTime() - d2.getTime());
}
/**
* 自己编写的判断闰年的方法
*
* @param year int 年份
* @return boolean(true=闰年,false=非闰年)
*/
public static boolean isLeapYear(int year) {
if ( (year % 400 == 0) || ( (year % 4 == 0) && (year % 100 != 0))) {
return true;
}
return false;
}

/**
* 自己编写的得到一年的天数的方法
*
* @param year int 年份
* @return int (非闰年=365,闰年=366)
*/
public static int getYearDays(int year) {
if (isLeapYear(year)) {
return 366;
}
return 365;
}
/**
* 将一个字符串格式化为一个java.util.Date对象 
*
* @param obj Object
* @return Date
*/
public static Date parse(Object obj) {
try {
if (obj == null) {
return null;
}
String dateString = obj.toString().trim();
if (dateString.length() == 0) {
return null;
}
if (dateString.length() == 10) {
dateString += " 00:00:00";
}
java.text.DateFormat df = new java.text.SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
return df.parse(dateString);
}
catch (ParseException ex) {
ex.printStackTrace();
return null;
}

}
public static void main(String[] args){
System.out.println("2005-08-07 到 2006-01-02 相差 "+compareDate(parse("2006-01-02"),parse("2005-08-07"),DateUtil.ON_DAY)+" 天");
}

}



↑返回目录
前一篇: 在jBuilder x中如何打包Bean文件
后一篇: Tomcat下 URL 如果带有汉字,如:http://localhost:8080/app/temp/upload/非技术.jpg 就显示不出来,大虾帮帮忙