joda-time-2.2将LocalDateTime转换为java.sql.Timestamp

时间:2013-03-15 13:08:13

标签: java timestamp jodatime

我需要一个java.sql.Timestamp但是当我尝试从LocalDateTime转换时,它失败了,因为当输入字符串转换为LocalDateTime时,添加了字母“T”,如2013-03-15T00:00: 00.000。有任何想法吗?或者有更好的方法将字符串转换为时间戳吗?我只是想使用joda,以防将来需要操作时间。

感谢。

2 个答案:

答案 0 :(得分:7)

为什么不能这样做

LocalDateTime ldt  = LocalDateTime.now();
Timestamp ts = new Timestamp(ldt.toDate().getTime());

答案 1 :(得分:1)

使用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);