将LocalDate转换为LocalDateTime或java.sql.Timestamp

我正在使用JodaTime 1.6.2。

我有一个LocalDate ,我需要转换为(Joda) LocalDateTimejava.sqlTimestamp ormapping。

原因是我已经想出了如何在LocalDateTimejava.sql.Timestamp之间进行转换:

 LocalDateTime ldt = new LocalDateTime(); DateTimeFormatter dtf = DateTimeFormatter.forPattern("yyyy-MM-dd HH:mm:ss"); Timestamp ts = Timestamp.valueOf(ldt.toString(dtf)); 

所以,如果我只能在LocalDateLocalDateTime之间转换,那么我可以继续转换为java.sql.Timestamp 。 感谢您的正确方向!

JodaTime

要将JodaTime的org.joda.time.LocalDate转换为java.sql.Timestamp ,就这样做

 Timestamp timestamp = new Timestamp(localDate.toDateTimeAtStartOfDay().getMillis()); 

要将JodaTime的org.joda.time.LocalDateTime转换为java.sql.Timestamp ,只需要

 Timestamp timestamp = new Timestamp(localDateTime.toDateTime().getMillis()); 

JavaTime

要将Java8的java.time.LocalDate转换为java.sql.Timestamp ,请执行此操作

 Timestamp timestamp = Timestamp.valueOf(localDate.atStartOfDay()); 

要将Java8的java.time.LocalDateTime转换为java.sql.Timestamp ,就这样做

 Timestamp timestamp = Timestamp.valueOf(localDateTime); 

使用Java 8时间API的最佳方法是:

  LocalDateTime ldt = timeStamp.toLocalDateTime(); Timestamp ts = Timestamp.valueOf(dateTime); 

与您的模型一起使用JPA( https://weblogs.java.net/blog/montanajava/archive/2014/06/17/using-java-8-datetime-classes-jpa ):

 @Converter(autoApply = true) public class LocalDateTimeConverter implements AttributeConverter<LocalDateTime, Timestamp> { @Override public Timestamp convertToDatabaseColumn(LocalDateTime ldt) { return Timestamp.valueOf(ldt); } @Override public LocalDateTime convertToEntityAttribute(Timestamp ts) { return ts.toLocalDateTime(); } } 

所以现在是相对时区独立的时间。 另外它很容易做到:

  LocalDate ld = ldt.toLocalDate(); LocalTime lt = ldt.toLocalTime(); 

格式:

  DateTimeFormatter DATE_TME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") String str = ldt.format(DATE_TME_FORMATTER); ldt = LocalDateTime.parse(str, DATE_TME_FORMATTER); 

更新:postgres 9.4.1208,HSQLDB 2.4.0等了解Java 8时间API没有任何对话!

根据您的时区,您可能会丢失几分钟(1650-01-01 00:00:00变成1649-12-31 23:52:58)

使用下面的代码来避免这种情况

 new Timestamp(localDateTime.getYear() - 1900, localDateTime.getMonthOfYear() - 1, localDateTime.getDayOfMonth(), localDateTime.getHourOfDay(), localDateTime.getMinuteOfHour(), localDateTime.getSecondOfMinute(), fractional);