Java 23小时工作日的日期差异

use*_*243 5 java date

我必须计算日期之间的差异,我找到了一种方法,但我有这个奇怪的结果,我错过了什么?

public static void main(String[] args) throws ParseException {
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    long result = format.parse("2012-03-25 24:00").getTime() - format.parse("2012-03-25 00:00").getTime();
    System.out.println("Difference in hours: " + result/(1000*60*60));
    result = format.parse("2012-03-26 24:00").getTime() - format.parse("2012-03-26 00:00").getTime();
    System.out.println("Difference in hours: " + result/(1000*60*60));
}
Run Code Online (Sandbox Code Playgroud)

结果如下:小时差异:23小时差异:24

感谢您的建议,现在我正在使用Joda libray,我有这个问题,当我用这种方式计算差异时:

DateTime  begin = new DateTime("2012-03-25T00:00+01:00");
DateTime  end = new DateTime("2012-03-26T00:00+01:00");
Hours m = Hours.hoursBetween(begin, end);
Run Code Online (Sandbox Code Playgroud)

如果我用这种方式来计算我24小时得到的小时数(因为我认为不考虑DST)

我应该使用什么类/微积分来考虑DST(我已经尝试了不同的方法,但我没有得到它)​​的23小时结果是期间类?

感谢所有的帮助......

Jon*_*eet 11

您可能碰巧选择了在该时区中夏令时变化的日期,因此这一天可能只有23个小时.(2012年3月25日肯定是欧洲的DST更改日期,例如欧洲/伦敦.我们不知道您的默认时区是什么.)

如果将日期格式设置为使用UTC,则不应看到此效果.(这是有些奇怪使用24:00的字符串表示,请注意.)目前还不清楚是什么你的数据意味着虽则代表,或者你要测量什么.如果要计算在这些当地时间之间实际经过的时间,您应该计算出您的数据真正意图所在的时区.

(正如另一个答案中所述,Joda Time一般来说是一个更好的API - 但你仍然需要知道如何正确使用它,并且当试图计算实际经过的时间时,你仍然会在这里看到相同的结果.)

  • @FabianBarney:根据我的经验,使用第二天的00:00更常见.这绝对是ISO-8601允许的 - 根据我的经验,这看起来很不寻常. (5认同)
  • @MukulGoel:不,23:59仍然是一天*之前*结束一天,如果你正在谈论的是一个瞬间(你通常是).第二天24:00到00:00之间的等效工作正常. (2认同)
  • @MukulGoel:问题是你一直忽视"独占上限"部分.当它用于将一天的结束标记为独占上限时,它很好 - 因为它不包含在*日内.没有立即失踪等.在过去三年的日期/时间API工作,我对此非常满意,并且不想要"一天的最后一刻,包容性",因为你几乎从不使用*包容性*上限. (2认同)