3月份两个日期之间的计算差异

时间:2014-11-05 16:38:21

标签: java date

我正在尝试计算两个日期之间的天数。

第一种情况:

    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

问题:

为什么这两种情况有区别?

由于

1 个答案:

答案 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小时。