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

2022-08-31 07:30:35

我正在使用JodaTime 1.6.2。

我有一个我需要转换为(Joda)或用于ormapping的。LocalDateLocalDateTimejava.sqlTimestamp

这样做的原因是我已经弄清楚了如何在a和a之间转换:LocalDateTimejava.sql.Timestamp

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

因此,如果我可以在 和 之间进行转换,那么我就可以继续转换为 .感谢您在正确方向上的任何推动!LocalDateLocalDateTimejava.sql.Timestamp


答案 1

乔达时间

要将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);

答案 2

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

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

要与模型一起使用(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 Time API!