将LocalDate转换为LocalDateTime或java.sql.Timestamp
我正在使用JodaTime 1.6.2。
我有一个LocalDate
,我需要转换为(Joda) LocalDateTime
或java.sqlTimestamp
ormapping。
原因是我已经想出了如何在LocalDateTime
和java.sql.Timestamp
之间进行转换:
LocalDateTime ldt = new LocalDateTime(); DateTimeFormatter dtf = DateTimeFormatter.forPattern("yyyy-MM-dd HH:mm:ss"); Timestamp ts = Timestamp.valueOf(ldt.toString(dtf));
所以,如果我只能在LocalDate
和LocalDateTime
之间转换,那么我可以继续转换为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);