【问题标题】:Creating DateTime from long从长创建日期时间
【发布时间】:2018-01-26 07:40:04
【问题描述】:

我正在使用 jodatime 库来处理日期和时间戳。我目前在从 long 创建日期时间对象时遇到问题:

DateTime e = new DateTime(new Long("5"));
System.out.println(e.toString(DateTimeFormat.forPattern("hh:mm:ss,SSS")));

这会打印出来

“01:00:00,005”

到控制台。这不是我所期望的,那将是

“00:00:00,005”

是否有人已经遇到过这个问题或可以向我解释一下?

【问题讨论】:

  • 您的时区是? long 指定 UTC 中的数据时间,您在本地时区打印它。
  • 不要DateTime用作Duration
  • @chris000r: joda.time.Duration.
  • 谢谢,没有看到持续时间的课程。感谢您的建议,我应该对 lib 进行更深入的了解

标签: java datetime jodatime


【解决方案1】:

Java 9 答案。

    Duration dur = Duration.ofMillis(5);
    String formattedDur = String.format(Locale.GERMANY, "%02d:%02d:%02d,%03d",
            dur.toHours(), dur.toMinutesPart(), dur.toSecondsPart(), dur.toMillisPart());
    System.out.println(formattedDur);

打印出来

00:00:00,005

我正在为不使用 Joda-Time 的任何人以及准备继续前进的任何人输入此答案。 Joda-Time 是一个基本完成的项目,没有预见到重大改进。这些人建议迁移到java.time

java.time.Duration 不适合格式化,但随着 Java 9 中 toXxxPart 方法的引入,它变得更好了。

【讨论】:

    【解决方案2】:

    是因为您生活在 UTC+1 时区吗? Unix 时间纪元基于 UTC,因为您在 UTC+1 时区,当您将 long 设置为零时,它是 00:00:00 UTC+0 = 01:00:00 @ UTC+1

    要获得您想要的结果,您可以按如下方式创建日期时间:

    DateTime dateTime = new DateTime(5L, DateTimeZone.UTC);
    System.out.println(dateTime.toString(DateTimeFormat.forPattern("HH:mm:ss,SSS")));
    

    https://en.wikipedia.org/wiki/Unix_time

    【讨论】:

    • 嗯,“在 Unix 纪元后 5 毫秒的时刻使用 UTC+1 偏移量的时区”。
    • @Brilly Tsang DateTime e = new DateTime(5L, DateTimeZone.UTC); System.out.println(e.toString(DateTimeFormat.forPattern("hh:mm:ss,SSS")));打印:12:00:00,005
    • 对,System.out.println(e.toString(DateTimeFormat.forPattern("HH:‌​mm:ss,SSS")));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 2015-08-19
    • 2017-08-13
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多