网上去找了些代码看看都不满意,比如2010 2 28 和 2010 3 1之间的天数应该是只是一天,2010是闰年
而以下三段代码都错的出来是4天import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class Main {
public static int getIntervalDays(Date startday,Date endday){
if(startday.after(endday)){
Date cal=startday;
startday=endday;
endday=cal;
}
long sl=startday.getTime();
long el=endday.getTime();
long ei=el-sl;
return (int)(ei/(1000*60*60*24));
}
public static void main(String[] args) throws ParseException {
Date d1 = new Date(2010,2,28);
Date d2 = new Date(2010,3,1);
System.out.println(getIntervalDays(d1,d2));
}
}import java.util.Calendar;public class Main {
public static int getIntervalDays(Calendar startday, Calendar endday) {
if (startday.after(endday)) {
Calendar cal = startday;
startday = endday;
endday = cal;
}
long sl = startday.getTimeInMillis();
long el = endday.getTimeInMillis(); long ei = el - sl;
return (int) (ei / (1000 * 60 * 60 * 24));
} public static void main(String[] args) {
Calendar cal1 = Calendar.getInstance();
cal1.set(2010, 2, 28);
Calendar cal2 = Calendar.getInstance();
cal2.set(2010, 3, 1);
System.out.println(getIntervalDays(cal1,cal2));
}
}import java.util.Calendar;public class Main {
public static int getDaysBetween (Calendar d1, Calendar d2){
if (d1.after(d2)) {
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2) {
d1 = (Calendar) d1.clone();
do {
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
} public static void main(String[] args) {
Calendar cal1 = Calendar.getInstance();
cal1.set(2010, 2, 28);
Calendar cal2 = Calendar.getInstance();
cal2.set(2010, 3, 1);
System.out.println(getDaysBetween(cal1, cal2));
}
}
请问,java有有比较好的解决这个闰年问题吗?是要自己写方法判断,还是有现成的方法精确的计算两个日期之间的天数?
请路过大牛不吝赐教,谢谢~
而以下三段代码都错的出来是4天import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class Main {
public static int getIntervalDays(Date startday,Date endday){
if(startday.after(endday)){
Date cal=startday;
startday=endday;
endday=cal;
}
long sl=startday.getTime();
long el=endday.getTime();
long ei=el-sl;
return (int)(ei/(1000*60*60*24));
}
public static void main(String[] args) throws ParseException {
Date d1 = new Date(2010,2,28);
Date d2 = new Date(2010,3,1);
System.out.println(getIntervalDays(d1,d2));
}
}import java.util.Calendar;public class Main {
public static int getIntervalDays(Calendar startday, Calendar endday) {
if (startday.after(endday)) {
Calendar cal = startday;
startday = endday;
endday = cal;
}
long sl = startday.getTimeInMillis();
long el = endday.getTimeInMillis(); long ei = el - sl;
return (int) (ei / (1000 * 60 * 60 * 24));
} public static void main(String[] args) {
Calendar cal1 = Calendar.getInstance();
cal1.set(2010, 2, 28);
Calendar cal2 = Calendar.getInstance();
cal2.set(2010, 3, 1);
System.out.println(getIntervalDays(cal1,cal2));
}
}import java.util.Calendar;public class Main {
public static int getDaysBetween (Calendar d1, Calendar d2){
if (d1.after(d2)) {
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2) {
d1 = (Calendar) d1.clone();
do {
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
} public static void main(String[] args) {
Calendar cal1 = Calendar.getInstance();
cal1.set(2010, 2, 28);
Calendar cal2 = Calendar.getInstance();
cal2.set(2010, 3, 1);
System.out.println(getDaysBetween(cal1, cal2));
}
}
请问,java有有比较好的解决这个闰年问题吗?是要自己写方法判断,还是有现成的方法精确的计算两个日期之间的天数?
请路过大牛不吝赐教,谢谢~
DateTime d2 = new DateTime(2010,3,1,0,0,0,0);
System.out.println(Days.daysBetween(d1,d2).getDays()); // 1
import java.text.ParseException;
import java.sql.Date;
public class Main {
public static int getIntervalDays(Date startday,Date endday){
if(startday.after(endday)){
Date cal=startday;
startday=endday;
endday=cal;
}
long sl=startday.getTime();
long el=endday.getTime();
long ei=el-sl;
return (int)(ei/(1000*60*60*24));
}
public static void main(String[] args) throws ParseException {
Date d1 = Date.valueOf("2010-02-28");
Date d2 = Date.valueOf("2010-03-01");
System.out.println(getIntervalDays(d1,d2));
}
}
用java.sql.Date吧,你用的那个创建日期的方法都废弃了!
public static void main(String[] args)
{
//Date date = new Date();
String strDateStart = "2009-6-10";
String strDateEnd = "2010-6-10"; try{ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dateStart = sdf.parse(strDateStart );
Date dateEnd = sdf.parse(strDateEnd );
System.out.println((dateEnd .getTime()- dateStart .getTime())/86400000); }catch(Exception ex){
ex.printStackTrace();
}
}
0表示1月,1表示2月
所以:
Calendar c1 = new GregorianCalendar(2010,1,28);//表示2010年2月28日
Calendar c2 = new GregorianCalendar(2010,2,1);//2010-3-1
System.out.println(c2.get(Calendar.DAY_OF_YEAR)-c1.get(Calendar.DAY_OF_YEAR));
但 用Date d = new Date(2010,2,28) 这种就是错的呢?
我getTime输出 发现两个时间对应的长整型都不一样,为什么?
* Allocates a <code>Date</code> object and initializes it so that
* it represents midnight, local time, at the beginning of the day
* specified by the <code>year</code>, <code>month</code>, and
* <code>date</code> arguments.
*
* @param year the year minus 1900.
* @param month the month between 0-11.
* @param date the day of the month between 1-31.
* @see java.util.Calendar
* @deprecated As of JDK version 1.1,
* replaced by <code>Calendar.set(year + 1900, month, date)</code>
* or <code>GregorianCalendar(year + 1900, month, date)</code>.
*/
@Deprecated
public Date(int year, int month, int date) {
this(year, month, date, 0, 0, 0);
}
话说,有些东西源码上写的很清楚……这个构造方法已经被废弃了,即使要用你也应该写new Date(110, 1, 28)来表示2010年2月28日……
public static void main(String[] args) throws ParseException {
Date b = DateFormat.getDateInstance().parse("2010-2-28");
Date e = DateFormat.getDateInstance().parse("2010-3-1");
System.out.println(ff(b, e)); // 1
} public static long ff(Date bDate, Date eDate) {
if (bDate == null || eDate == null)
return 0L;
return (eDate.getTime() - bDate.getTime()) / (1000 * 3600 * 24);
}
}
System.out.println(((GregorianCalendar)now).isLeapYear(2010));2010不是闰年吧。