GregorianCalendar无法添加97天?

Bri*_*isk 0 java scala date gregorian-calendar

我正在创建3个GregorianCalendar对象:

  1. 2018年12月4日
  2. 2018年12月4日+ 96天
  3. 2018年12月4日+ 97天

第一天和第二天之间的日差为96天.第一个和第三个之间的日差是...... 96天.说呀?

对Scala代码表示歉意,但是Java-heads应该能够得到正在发生的事情:

def test(): Unit = {
    val start = new GregorianCalendar(2018, 11, 4)
    val laterA = new GregorianCalendar(2018, 11, 4)
    laterA.add(Calendar.DATE, 96)
    val laterB = new GregorianCalendar(2018, 11, 4)
    laterB.add(Calendar.DATE, 97)
    println(ChronoUnit.DAYS.between(start.toInstant, laterA.toInstant))
    println(ChronoUnit.DAYS.between(start.toInstant, laterB.toInstant))
  }
Run Code Online (Sandbox Code Playgroud)

以上打印如下:

96
96
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

rge*_*man 7

您必须位于美国的区域设置(或与美国同时启动夏令时的区域设置).2019年,夏令时开始于2019年3月10日星期日凌晨2点.

自2018年12月4日起增加96天收益于2019年3月10日.从2018年12月4日起增加97天收益率2019年3月11日.

格式化和输出laterAlaterB产量:

2019-03-10 00:00:00
2019-03-11 00:00:00
Run Code Online (Sandbox Code Playgroud)

请注意,由于DST(在美国),这两个日期之间有23个小时.

但该between方法截断了小数单位.

计算返回一个整数,表示两个时间之间的完整单位数.例如,11:30到13:29之间的小时数仅为1小时,因为它是两小时的一分钟.

因此,返回96天,23小时(因DST而不是97天)的差异96.