我正在尝试计算两个日期之间的天数。
第一种情况:
String string = "01/03/2014";
Date dateFin = new SimpleDateFormat("dd/MM/yyyy", Locale.FRANCE).parse(string);
string = "31/03/2014";
Date dateDebut = new SimpleDateFormat("dd/MM/yyyy", Locale.FRANCE).parse(string);
long result = Math.abs(dateFin.getTime() - dateDebut.getTime());
System.out.println((int) (result / (long) (1000 * 3600 * 24)));
=>结果:
29
第二种情况:
String string = "01/03/2013";
Date dateFin = new SimpleDateFormat("dd/MM/yyyy", Locale.FRANCE).parse(string);
string = "31/03/2013";
Date dateDebut = new SimpleDateFormat("dd/MM/yyyy", Locale.FRANCE).parse(string);
long result = Math.abs(dateFin.getTime() - dateDebut.getTime());
System.out.println((int) (result / (long) (1000 * 3600 * 24)));
=>结果:
30
问题:
为什么这两种情况有区别?
由于
答案 0 :(得分:3)
result
中的值比确切的24*30
小时小1小时。如果您将3600000
(即1小时)添加到result
,您将获得准确的24
小时(以毫秒为单位)。显然在法国,他们在3月份从冬季到夏季更换时钟。因此,3月份有24*30 - 1
小时,而不是24
小时。这解释了为什么在尝试两个五月日期时没有遇到同样的问题。根据我所看到的,这是我最好的解释。
另见:
http://timeanddate.com/time/change/france/paris?year=2013
http://timeanddate.com/time/change/france/paris?year=2014
您正在解析31/03/2013(即00:00 AM)。时钟的变化没有发生 截至2013年3月31日,凌晨02:00。因此,在2013年,您将在3月完成30 * 24小时的准备工作 而在2014年,由于2014年3月30日发生了变化,您将减少1小时。