如何将 LocalDateTime 转换为 OffsetDateTime?

Mel*_*ius 20 datetime java-8

如何将 LocalDateTime 转换为 OffsetDateTime?

private OffsetDateTime getEntryDate(Payment payment){
    return Optional.ofNullable(payment).map(Payment::getEntryDate).map(SHOULD RETURN OffsetDateTime)
            .orElse(null);
}
Run Code Online (Sandbox Code Playgroud)

Payment::getEntryDate 将返回 LocalDateTime

Cee*_*Tee 11

您需要获取 ZoneOffset 以在创建 OffsetDateTime 时使用。一种方法是为您的位置使用 ZoneId:

final ZoneId zone = ZoneId.of("Europe/Paris");
LocalDateTime localDateTime = LocalDateTime.now();
ZoneOffset zoneOffSet = zone.getRules().getOffset(localDateTime);
OffsetDateTime offsetDateTime = localDateTime.atOffset(zoneOffSet);
System.out.println(offsetDateTime); // 2019-08-08T09:54:10.761+02:00
Run Code Online (Sandbox Code Playgroud)


Arv*_*ash 8

有很多方法可以转换LocalDateTimeOffsetDateTime. 其中一些如下所列:

1. 使用LocalDateTime#atOffset?(ZoneOffset offset)

LocalDateTime ldt = LocalDateTime.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = ldt.atOffset(offset);
Run Code Online (Sandbox Code Playgroud)

2. 使用LocalDateTime#atZone?(ZoneId zone)=> ZonedDateTime#toOffsetDateTime()

LocalDateTime ldt = LocalDateTime.now();

// Change the ZoneId as required e.g. ZoneId.of("Europe/London")
ZoneId zoneId = ZoneId.systemDefault();

OffsetDateTime odt = ldt.atZone(zoneId).toOffsetDateTime();
Run Code Online (Sandbox Code Playgroud)

3. 使用OffsetDateTime#of?(LocalDateTime dateTime, ZoneOffset offset)

LocalDateTime ldt = LocalDateTime.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = OffsetDateTime.of(ldt, offset);
Run Code Online (Sandbox Code Playgroud)

4. ZonedDateTime#of?(LocalDateTime localDateTime, ZoneId zone)=> ZonedDateTime#toOffsetDateTime()

LocalDateTime ldt = LocalDateTime.now();

// Change the ZoneId as required e.g. ZoneId.of("Europe/London")
ZoneId zoneId = ZoneId.systemDefault();

OffsetDateTime odt = ZonedDateTime.of(ldt, zoneId).toOffsetDateTime();
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 在上面给出的所有解决方案中,ZoneOffset根据需要更换样品,例如ZoneOffset offset = ZoneOffset.of("+02:00")
  2. 在上面给出的所有解决方案中,LocalDateTime根据需要更换样品,例如LocalDateTime ldt = LocalDateTime.of(2021, 3, 14, 10, 20)