java - Java 23 小时制中的日期差异

标签 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));
}

这是结果: 时差:23 时差:24

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

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);

如果我使用这种方式计算我得到 24 小时的小时数(因为我假设不考虑夏令时)

考虑到 DST(我已经尝试过不同的方法,但我不明白)Period 类,我应该使用什么类/微积分来获得 23 小时的结果?

感谢所有的帮助...

最佳答案

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

如果您将日期格式设置为使用 UTC,您应该看不到这种效果。 (请注意,在字符串表示中使用 24:00 有点奇怪。)不清楚您的数据意味着要表示什么,或者您要测量什么。如果您想计算出这些本地时间之间实际经过了多少时间,您应该弄清楚您的数据真正应该在哪个时区。

(如另一个答案所述,Joda Time 通常是一个更好的 API - 但您仍然需要知道如何正确使用它,并且在尝试计算实际耗时时,您仍然会看到这里的结果相同。)

关于java - Java 23 小时制中的日期差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13527292/

相关文章:

c# - Noda Time : Period. 返回错误值之间

java - RSS Feed,解析所有可能的日期

javascript - 有效日期作为无效日期 Javascript 的输出

java - Eclipse 停止工作并且无法启动

java - 具有多个子项的 ScrollView

java - Apache 弗林克 : When using count() on DataSet only this job will be executed

linux - 如何重命名目录中的所有文件添加当前 unix 日期的前缀

java - 查找并检查编辑文本中的最后 4 个字符

java - JApplet 窗口在 netbeans 中是空白的

javascript - MySQL 日期到 Javascript 日期