如何将LocalDateTime转换为OffsetDateTime?
如何将LocalDateTime转换为OffsetDateTime如何将LocalDateTime转换为OffsetDateTime?,datetime,java-8,Datetime,Java 8,如何将LocalDateTime转换为OffsetDateTime private OffsetDateTime getEntryDate(Payment payment){ return Optional.ofNullable(payment).map(Payment::getEntryDate).map(SHOULD RETURN OffsetDateTime) .orElse(null); } Payment::getEntryDate将返回LocalDa
private OffsetDateTime getEntryDate(Payment payment){
return Optional.ofNullable(payment).map(Payment::getEntryDate).map(SHOULD RETURN OffsetDateTime)
.orElse(null);
}
Payment::getEntryDate
将返回LocalDateTime
您需要获取创建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
那么:
OffsetDateTime convertToOffsetDateTime(LocalDateTime ldt) {
ZoneOffset offset = OffsetDateTime.now().getOffset();
OffsetDateTime offsetDateTime = ldt.atOffset(offset);
return offsetDateTime;
}
OffsetDateTime只是从UTC偏移的日期时间 因此,如果您有一个固定的偏移量(例如UTC的+02),您可以这样转换localDateTime:
OffsetDateTime.of(localDateTime, ZoneOffset.of("+2"));
OffsetDateTime.of(localDateTime, ZoneOffset.of("+02"));
OffsetDateTime.of(localDateTime, ZoneOffset.of("+02:00"));
大多数情况下,您希望获得特定时区的偏移量,在这种情况下,最好使用ZoneDateTime
,因为对于大多数时区,夏季/冬季的偏移量不同,ZoneDateTime
将自动为您处理
如果您绝对想要偏移特定时区的OffsetDateTime
,可以编写:
localDateTime.atZone(ZoneId.of("Europe/Paris")).toOffsetDateTime();
以下是我的解决方案:
public Instant toInstant(LocalDate date) {
return date
.atStartOfDay()
.toInstant(ZoneOffset.UTC);
}
public OffsetDateTime toOffsetDateTime(LocalDate date) {
return OffsetDateTime.ofInstant(
toInstant(date),
ZoneOffset.UTC
);
}
有许多方法可以将
LocalDateTime
转换为OffsetDateTime
。以下列出了其中一些:
1。使用:
LocalDateTime ldt = LocalDateTime.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = ldt.atOffset(offset);
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();
LocalDateTime ldt = LocalDateTime.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = OffsetDateTime.of(ldt, offset);
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();
2。使用=>:
LocalDateTime ldt = LocalDateTime.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = ldt.atOffset(offset);
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();
LocalDateTime ldt = LocalDateTime.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = OffsetDateTime.of(ldt, offset);
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();
3。使用:
LocalDateTime ldt = LocalDateTime.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = ldt.atOffset(offset);
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();
LocalDateTime ldt = LocalDateTime.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = OffsetDateTime.of(ldt, offset);
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();
4.=><代码>ZonedDateTime#toOffsetDateTime():
LocalDateTime ldt = LocalDateTime.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = ldt.atOffset(offset);
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();
LocalDateTime ldt = LocalDateTime.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = OffsetDateTime.of(ldt, offset);
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();
注意事项:
LocalDateTime ldt = LocalDateTime.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = ldt.atOffset(offset);
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();
LocalDateTime ldt = LocalDateTime.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = OffsetDateTime.of(ldt, offset);
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();
ZoneOffset
,例如,ZoneOffset offset=ZoneOffset.of(“+02:00”)
LocalDateTime
,例如LocalDateTime ldt=LocalDateTime.of(2021,3,14,10,20)
OffsetDataTime::of(LocalDataTime,ZoneOffset)
?如何获取该ZoneOffset?从何处获取?这取决于你是否知道,我的意思是一个LocalDataTime
就是,一个本地。。。无论您想应用什么偏移量,都有一些预定义的类型,最常见的UTC
我想我需要保留所有信息,因此我猜不出要使用哪个区域偏移量。请详细解释。您可以提供一个LocalDateTime对象,然后在localmaschine上创建偏移量。然后使用此偏移量创建offsetDateTime并返回它。由于LocalDateTime不存储原始偏移量,因此原始偏移量仍然丢失,因此我们必须创建它。如果需要jvm默认时区的偏移量,可以将其写入一行:ldt.atZone(ZoneId.systemDefault()).toOffsetDateTime()