将java.time.LocalDateTime SE 8转换为时间戳

Jos*_* L. 6 java mysql time timestamp

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

        LocalDateTime c = LocalDateTime.now();

        java.sql.Timestamp javaSqlDate = new java.sql.Timestamp(c.getLong());
Run Code Online (Sandbox Code Playgroud)

我想我需要把它转换成一个很长的,但我不知道如何.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);
Run Code Online (Sandbox Code Playgroud)

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

ham*_*ion 3

首先,您应该决定是否真的要使用 LocalDateTime。以下是关于差异的一些解释,摘自此处

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

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

为了从 LocalDateTime 获取较长时间,您应该提供一个 timezone