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

时间:2015-06-29 08:12:40

标签: 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());

我想我需要把它转换成一个很长的,但我不知道如何。 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正确打印当前日期。我希望它保存当前日期。

2 个答案:

答案 0 :(得分:3)

LocalDateTime l = LocalDateTime.now();
Timestamp t = Timestamp.valueOf(l);

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

答案 1 :(得分:2)

首先,您应该决定是否确实要使用LocalDateTime。 以下是有关差异的一些解释,取自here

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

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

为了从LocalDateTime获得更长的时间,你应该provide a timezone