Java 8 - 将 LocalDate 转换为 OffsetDateTime
Java 8 - Convert LocalDate to OffsetDateTime
我想知道是否可以在 Java 8 中将 LocalDate 转换为 OffsetDateTime。
例如假设我有这个 LocalDate:
1992-12-28
然后我想把它转换成这个 OffsetDateTime
:
1992-12-28T00:00-03:00
假设我们知道时区,例如America/Santiago。
你可以试试这个..
OffsetDateTime o = OffsetDateTime.of(LocalDate.now(),LocalTime.NOON, ZoneOffset.UTC);
OffsetDateTime o1 = OffsetDateTime.of(LocalDateTime.now(), ZoneOffset.UTC);
假设您实际上有 LocalDateTime
,您可以这样做:
ZoneOffset zoneOffset = ZoneOffset.ofHours(2);
OffsetDateTime offsetDateTime = ldt.atOffset(zoneOffset);
ldt
是您的 LocalDateTime
实例。
我自由地在你的问题中编辑了一些假设。一些合理的,恕我直言,但你应该检查一下。如有不妥请指正。在这些假设下,正确的转换是:
ZoneId zone = ZoneId.of("Europe/Madrid");
LocalDate date = LocalDate.of(2019, Month.JULY, 27);
OffsetDateTime odt = date.atStartOfDay(zone)
.toOffsetDateTime();
System.out.println(odt);
输出:
2019-07-27T00:00+02:00
Java 了解夏令时 (DST) 并找到考虑夏令时的时区的正确偏移量。我调用的 atStartOfDay
方法产生一个 ZonedDateTime
,这是一个带时区的日期和时间。它有一个 toOffsetDateTime
方法,用于转换为您要求的 OffsetDateTime
。
有很多方法可以将 LocalDate
转换为 OffsetDateTime
。下面列出了其中一些:
1.使用 LocalDate#atStartOfDay(ZoneId zone)
=> ZonedDateTime#toOffsetDateTime()
:
LocalDate date = LocalDate.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = date.atStartOfDay(offset).toOffsetDateTime();
这也可以在您有 ZoneId
可用时使用,例如
LocalDate date = LocalDate.now();
// You can use a custom ZoneId e.g. ZoneId.of("Europe/London")
ZoneId zoneId = ZoneId.systemDefault();
OffsetDateTime odt = date.atStartOfDay(zoneId).toOffsetDateTime();
2。使用 LocalDate#atStartOfDay()
=> LocalDateTime#atOffset(ZoneOffset offset)
:
LocalDate date = LocalDate.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = date.atStartOfDay().atOffset(offset);
3。使用 LocalDate#atTime(OffsetTime time)
:
LocalDate date = LocalDate.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = date.atTime(OffsetTime.of(LocalTime.MIDNIGHT, offset));
4.使用 OffsetDateTime#of(LocalDate date, LocalTime time, ZoneOffset offset)
:
LocalDate date = LocalDate.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = OffsetDateTime.of(date, LocalTime.MIDNIGHT, offset);
备注:
- 在上面给出的所有解决方案中,根据需要替换示例
ZoneOffset
例如ZoneOffset offset = ZoneOffset.of("+02:00")
.
- 在上面给出的所有解决方案中,根据需要替换示例
LocalDate
例如LocalDate date = LocalDate.of(2021, 3, 14)
.
我们在项目中一直这样做。特别是检查日期是否在给定的日期范围内。这是我们的做法。
public static OffsetDateTime getOffsetDateTime(LocalDate date, String zone) {
return date.atStartOfDay(ZoneId.of(zone)).toOffsetDateTime();
}
区域看起来像 Australia/Melbourne
或 UTC
。如果您有句柄,也可以直接使用 ZoneId。将它设置在特定区域很重要,因为 OffsetDateTime 将与区域进行日期时间。
调用如下所示
String defaultZone = "Australia/Melbourne";
OffsetDateTime meetingStartDate = DateUtils.getOffsetDateTime(project.getCanStartDate(), defaultZone);
我想知道是否可以在 Java 8 中将 LocalDate 转换为 OffsetDateTime。
例如假设我有这个 LocalDate:
1992-12-28
然后我想把它转换成这个 OffsetDateTime
:
1992-12-28T00:00-03:00
假设我们知道时区,例如America/Santiago。
你可以试试这个..
OffsetDateTime o = OffsetDateTime.of(LocalDate.now(),LocalTime.NOON, ZoneOffset.UTC);
OffsetDateTime o1 = OffsetDateTime.of(LocalDateTime.now(), ZoneOffset.UTC);
假设您实际上有 LocalDateTime
,您可以这样做:
ZoneOffset zoneOffset = ZoneOffset.ofHours(2);
OffsetDateTime offsetDateTime = ldt.atOffset(zoneOffset);
ldt
是您的 LocalDateTime
实例。
我自由地在你的问题中编辑了一些假设。一些合理的,恕我直言,但你应该检查一下。如有不妥请指正。在这些假设下,正确的转换是:
ZoneId zone = ZoneId.of("Europe/Madrid");
LocalDate date = LocalDate.of(2019, Month.JULY, 27);
OffsetDateTime odt = date.atStartOfDay(zone)
.toOffsetDateTime();
System.out.println(odt);
输出:
2019-07-27T00:00+02:00
Java 了解夏令时 (DST) 并找到考虑夏令时的时区的正确偏移量。我调用的 atStartOfDay
方法产生一个 ZonedDateTime
,这是一个带时区的日期和时间。它有一个 toOffsetDateTime
方法,用于转换为您要求的 OffsetDateTime
。
有很多方法可以将 LocalDate
转换为 OffsetDateTime
。下面列出了其中一些:
1.使用 LocalDate#atStartOfDay(ZoneId zone)
=> ZonedDateTime#toOffsetDateTime()
:
LocalDate date = LocalDate.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = date.atStartOfDay(offset).toOffsetDateTime();
这也可以在您有 ZoneId
可用时使用,例如
LocalDate date = LocalDate.now();
// You can use a custom ZoneId e.g. ZoneId.of("Europe/London")
ZoneId zoneId = ZoneId.systemDefault();
OffsetDateTime odt = date.atStartOfDay(zoneId).toOffsetDateTime();
2。使用 LocalDate#atStartOfDay()
=> LocalDateTime#atOffset(ZoneOffset offset)
:
LocalDate date = LocalDate.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = date.atStartOfDay().atOffset(offset);
3。使用 LocalDate#atTime(OffsetTime time)
:
LocalDate date = LocalDate.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = date.atTime(OffsetTime.of(LocalTime.MIDNIGHT, offset));
4.使用 OffsetDateTime#of(LocalDate date, LocalTime time, ZoneOffset offset)
:
LocalDate date = LocalDate.now();
ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = OffsetDateTime.of(date, LocalTime.MIDNIGHT, offset);
备注:
- 在上面给出的所有解决方案中,根据需要替换示例
ZoneOffset
例如ZoneOffset offset = ZoneOffset.of("+02:00")
. - 在上面给出的所有解决方案中,根据需要替换示例
LocalDate
例如LocalDate date = LocalDate.of(2021, 3, 14)
.
我们在项目中一直这样做。特别是检查日期是否在给定的日期范围内。这是我们的做法。
public static OffsetDateTime getOffsetDateTime(LocalDate date, String zone) {
return date.atStartOfDay(ZoneId.of(zone)).toOffsetDateTime();
}
区域看起来像 Australia/Melbourne
或 UTC
。如果您有句柄,也可以直接使用 ZoneId。将它设置在特定区域很重要,因为 OffsetDateTime 将与区域进行日期时间。
调用如下所示
String defaultZone = "Australia/Melbourne";
OffsetDateTime meetingStartDate = DateUtils.getOffsetDateTime(project.getCanStartDate(), defaultZone);