【问题标题】:Convert java.time.LocalDateTime SE 8 to timestamp [duplicate]将 java.time.LocalDateTime SE 8 转换为时间戳 [重复]
【发布时间】:2015-09-15 15:03:42
【问题描述】:

如何将 Localdatetime 转换为时间戳?我想使用新的 SE 8 date api,因为它比 util date 和 calendar 更好。我计划在整个程序中使用 localdatetime,然后将该日期放入 mysql 数据库中。我一直在寻找答案,但 java.time 似乎没有很多问题和答案。这是我正在测试的一些代码。这是我得到的。

        LocalDateTime c = LocalDateTime.now();

        java.sql.Timestamp javaSqlDate = new java.sql.Timestamp(c.getLong());

我想我需要先将其转换为 long,但我不知道如何。该 api 允许转换单个元素,如月份和日期,但不能转换整个日期。既然我已经在这里,你如何从时间戳转换回来?我应该只使用jodatime吗?

我试过这个:

 LocalDateTime c = LocalDateTime.now();
 ZoneId zoneId = ZoneId.systemDefault();

 System.out.println("this:" + c);

 java.sql.Timestamp javaSqlDate = new java.sql.Timestamp(c.atZone(zoneId).toEpochSecond());

 pst.setTimestamp(2, javaSqlDate);

这只会保存 1970 年左右的日期。system.print 会正确打印当前日期。我希望它保存当前日期。

【问题讨论】:

    标签: java mysql time timestamp


    【解决方案1】:
    LocalDateTime l = LocalDateTime.now();
    Timestamp t = Timestamp.valueOf(l);
    

    来源:https://coderanch.com/t/651936/databases/Convert-java-time-LocalDateTime-SE

    【讨论】:

      【解决方案2】:

      首先,您应该决定是否真的要使用 LocalDateTime。 下面是一些关于差异的解释,取自here

      <...> LocalDateTime 不像 Instant 那样是时间线上的一个点,LocalDateTime 只是人们在便条上写的日期和时间。考虑以下示例:两个人于 2013 年 7 月 2 日上午 11 点出生。第一个出生在英国,第二个出生在加利福尼亚。如果我们向他们中的任何一个询问他们的出生日期,看起来他们是在同一时间出生的(这是 LocalDateTime),但是如果我们在时间线上对齐日期(使用 Instant),我们会发现出生在加利福尼亚的那个比在英国出生的人年轻几个小时(注意:要创建适当的 Instant,我们必须将时间转换为 UTC,这就是区别所在)。<...>

      为了从 Instant 中获得长,您可以使用getEpochSecond() 方法。

      为了远离 LocalDateTime 你应该provide a timezone

      【讨论】:

      • 实际程序是将日期存储到 LocalDateTime 中。
      猜你喜欢
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 2014-04-11
      • 2018-09-12
      • 2013-12-14
      • 2020-05-30
      • 2014-09-10
      • 1970-01-01
      相关资源
      最近更新 更多