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())找到的“印度标准时间”时区;这似乎证实了布莱恩·马勒霍恩假说