【问题标题】:From timestamp to date in JavaJava中从时间戳到日期
【发布时间】:2014-04-29 19:08:09
【问题描述】:

我在 Java 中创建新日期时遇到问题。我从 web 服务收到一个时间戳(例如 1397692800)。您可以从this 在线转换器中看到等于 2014 年 4 月 17 日。 当我尝试在 Java 中使用此时间戳创建新日期时

Date date = new Date (1397692800);

控制台告诉我这等于 Sat Jan 17 05:14:52 CET 1970。我的代码有什么问题?

【问题讨论】:

    标签: java android date timestamp


    【解决方案1】:

    Date(long) 构造函数采用自 Unix 纪元以来的 毫秒 数。我强烈怀疑您已经获得了自 Unix 纪元以来的 秒数 - 所以只需将该值乘以 1000L。

    Date date = new Date(timestamp * 1000L);
    

    确保使用 1000L 而不是 1000,否则如果 timestampint,它将以 32 位而不是 64 位执行算术,您很可能会得到错误的结果。

    【讨论】:

    • 感谢您的回复,我不知道,现在一切正常。
    【解决方案2】:

    java.time

    现代方法使用 java.time 类。

    Instant instant = Instant.ofEpochSecond( 1_397_692_800L ) ;
    

    instant.toString(): 2014-04-17T00:00:00Z


    关于java.time

    java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

    Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

    要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

    您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。

    从哪里获得 java.time 类?

    【讨论】:

      猜你喜欢
      • 2012-06-18
      • 2021-01-28
      • 2017-05-31
      • 2013-06-03
      • 2015-04-25
      • 2017-04-29
      • 2015-12-28
      • 2013-11-03
      • 2011-03-29
      相关资源
      最近更新 更多