【问题标题】:Java timestamp, can not get correct valueJava时间戳,无法获得正确的值
【发布时间】:2015-01-24 17:50:04
【问题描述】:

我想将此1416990366 时间戳转换为日期。这是我的做法:

    Timestamp stamp = new Timestamp(1416990366);
    System.out.println("TimeStamp: " + stamp.toString());
    Date mDate = new Date(stamp.getTime());

但我得到Sat Jan 17 13:06:30 GMT+03:30 1970,而它必须是Wed, 26 Nov 2014 08:26:06 GMT,怎么了?

编辑:

我从服务器得到这个值,我认为他们切断了毫秒,所以我必须将它乘以 1000,但我什么也没得到,而且又是错误的值。 为什么这仍然不起作用Timestamp stamp = new Timestamp(1000 * mIssue.getReleaseTime());mIssue.getReleaseTime() = 1416990366 谁能帮忙?

【问题讨论】:

    标签: java mysql timestamp unix-timestamp


    【解决方案1】:

    Timestamp 构造函数指定的时间是自 1970 年 1 月 1 日 00:00:00 GMT 以来的时间(以毫秒为单位)。 1416990366 从那个时期开始计算大约 16 天,因此你得到了输出。

    如果你想要当前时间,你可以将System.currentTimeMillis()传递给构造函数。

    编辑: 由于从服务器获取的时间是以毫秒为单位的,因此您可以乘以 1000 并转换为long,如下所示:

    Timestamp stamp = new Timestamp((long) 1000 * mIssue.getReleaseTime());
    

    【讨论】:

    • 感谢您的帮助,我从服务器获得了这个值,我认为他们切断了毫秒,所以我必须将它乘以 1000,但我什么也没得到,又是错误的值。
    • 为什么这仍然不起作用Timestamp stamp = new Timestamp(1000 * mIssue.getReleaseTime()); where mIssue.getReleaseTime() = 1416990366
    • 如果这能解决任何问题 System.out.println(new Date(0)); 打印 Thu Jan 01 02:00:00 EET 1970!
    • @mmlooloo 您需要将结果转换为long。答案已更新。
    【解决方案2】:

    java.time

    现代方式是使用 java.time 类。

    Instant instant = Instant.ofEpochSecond( 1416990366L );
    

    调用toString 生成一个字符串,以标准 ISO 8601 格式表示其日期时间值。

    2014-11-26T08:26:06Z

    Instant 是 UTC 时间线上的时刻,分辨率为 nanoseconds

    大部分 java.time 功能在ThreeTen-Backport 中向后移植到Java 6 和7,并进一步适应ThreeTenABP 中的Android(参见How to use…)。

    【讨论】:

    • @mmlooloo 查看我为 ThreeTenABP 项目添加的最后一段。
    • 感谢您介绍新库,但实际上在我的情况下,添加新库也会增加方法计数并增加我的 apk 的二进制大小,所以我仍然更喜欢使用旧的编码风格,除非我需要大量时间 API .再次感谢:-)
    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    相关资源
    最近更新 更多