Java 为什么两个日期之间的天数不正确?
我目前正在尝试获取两个日期之间的天数Java 为什么两个日期之间的天数不正确?,java,linux,date,Java,Linux,Date,我目前正在尝试获取两个日期之间的天数 日期1:2015年1月21日 日期2:2015年7月23日 在我的本地eclipse tomcat服务器(在印度)中,我得到的天数为:183,代码如下: Calendar cal1 = new GregorianCalendar(); Calendar cal2 = new GregorianCalendar(); Date date1 = new Date("21-JAN-15"); Date date2 = new Date("23-JUL-15");
日期1:2015年1月21日
日期2:2015年7月23日
在我的本地eclipse tomcat服务器(在印度)中,我得到的天数为:183
,代码如下:
Calendar cal1 = new GregorianCalendar();
Calendar cal2 = new GregorianCalendar();
Date date1 = new Date("21-JAN-15");
Date date2 = new Date("23-JUL-15");
cal1.setTime(date1);
cal2.setTime(date2);
System.out.println("Days= "+daysBetween(cal1.getTime(),cal2.getTime()));
public int daysBetween(Date d1, Date d2){
return (int)( (d2.getTime() - d1.getTime()) / (1000 * 60 * 60 * 24));
}
当我将同一个java文件复制到linux服务器上,并使用javac
和java
命令在那里运行该文件时,我得到的差别是:182,这比原来少了一天
我已使用命令确认linux服务器的默认时区为EDT:date+%z
我在这里很困惑。我的应用程序中没有JODA库,我无法使用它。为了在本地环境和linux服务器中获得统一的结果,我需要做哪些更改?任何帮助都将不胜感激 这里有一个使用
时间单位的解决方案
public static void main(String[] args) {
Date date1 = new Date("21-JAN-15");
Date date2 = new Date("23-JUL-15");
long diffInMillies = date2.getTime() - date1.getTime();
System.out.println(TimeUnit.MILLISECONDS.toDays(diffInMillies));
}
输出:
182
很可能你的时区仍然不同。也许Java从不同于
date
的地方获取时区。尝试运行System.out.println(TimeZone.getDefault().getDisplayName())代码>。如果让我猜的话,我会说夏令时是问题的根源。在美国,由于这种转变,三月的时间减少了1小时——按你的标准计算,三月的时间为30.96天,四舍五入为30天。这可能有助于@BrianMalehorn:检查时区。在我当地,它打印:印度标准时间。在Linux服务器中,它打印:东部标准时间。@singhakash:您显示的线程对我没有帮助。在我的本地服务器和linux服务器中,mimimaldaysinfirstweek都设置为1。我机器上的输出为183。时区是使用System.out.println(TimeZone.getDefault().getDisplayName())找到的“印度标准时间”时区;这似乎证实了布莱恩·马勒霍恩假说