San*_*Rey 9 java datetime date datetime-conversion java-8
我想知道是否可以在 Java 8 中将 LocalDate 转换为 OffsetDateTime。
例如假设我有这个 LocalDate:
1992-12-28
Run Code Online (Sandbox Code Playgroud)
然后我想把它转换成这样OffsetDateTime
:
1992-12-28T00:00-03:00
Run Code Online (Sandbox Code Playgroud)
假设我们知道时区,例如 America/Santiago。
我在你的问题中自由地编辑了一些假设。一些合理的,恕我直言,但你应该检查。如有不对之处请指正。在这些假设下,正确的转换是:
ZoneId zone = ZoneId.of("Europe/Madrid");
LocalDate date = LocalDate.of(2019, Month.JULY, 27);
OffsetDateTime odt = date.atStartOfDay(zone)
.toOffsetDateTime();
System.out.println(odt);
Run Code Online (Sandbox Code Playgroud)
输出:
2019-07-27T00:00+02:00
Java 知道夏令时 (DST) 并在考虑夏令时找到正确的时区偏移量。atStartOfDay
我调用的方法会生成一个ZonedDateTime
,即带时区的日期和时间。它有一种toOffsetDateTime
转换为OffsetDateTime
您要求的方法。
小智 7
你可以试试这个..
OffsetDateTime o = OffsetDateTime.of(LocalDate.now(),LocalTime.NOON, ZoneOffset.UTC);
OffsetDateTime o1 = OffsetDateTime.of(LocalDateTime.now(), ZoneOffset.UTC);
Run Code Online (Sandbox Code Playgroud)
有很多方法可以转换LocalDate
为OffsetDateTime
. 下面列出了其中一些:
1. 使用LocalDate#atStartOfDay\xe2\x80\x8b(ZoneId zone)
=> ZonedDateTime#toOffsetDateTime()
:
LocalDate date = LocalDate.now();\nZoneOffset offset = ZoneOffset.UTC;\nOffsetDateTime odt = date.atStartOfDay(offset).toOffsetDateTime();\n
Run Code Online (Sandbox Code Playgroud)\n当您有可用的情况时,也可以使用此方法,ZoneId
例如
LocalDate date = LocalDate.now();\n\n// You can use a custom ZoneId e.g. ZoneId.of("Europe/London")\nZoneId zoneId = ZoneId.systemDefault(); \n\nOffsetDateTime odt = date.atStartOfDay(zoneId).toOffsetDateTime();\n
Run Code Online (Sandbox Code Playgroud)\n2. 使用LocalDate#atStartOfDay()
=> LocalDateTime#atOffset\xe2\x80\x8b(ZoneOffset offset)
:
LocalDate date = LocalDate.now();\nZoneOffset offset = ZoneOffset.UTC;\nOffsetDateTime odt = date.atStartOfDay().atOffset(offset);\n
Run Code Online (Sandbox Code Playgroud)\n3. 使用LocalDate#atTime(OffsetTime time)
:
LocalDate date = LocalDate.now();\nZoneOffset offset = ZoneOffset.UTC;\nOffsetDateTime odt = date.atTime(OffsetTime.of(LocalTime.MIDNIGHT, offset));\n
Run Code Online (Sandbox Code Playgroud)\n4. 使用OffsetDateTime#of\xe2\x80\x8b(LocalDate date, LocalTime time, ZoneOffset offset)
:
LocalDate date = LocalDate.now();\nZoneOffset offset = ZoneOffset.UTC;\nOffsetDateTime odt = OffsetDateTime.of(date, LocalTime.MIDNIGHT, offset);\n
Run Code Online (Sandbox Code Playgroud)\n笔记:
\nZoneOffset
在上面给出的所有解决方案中,根据需要更换样品,例如ZoneOffset offset = ZoneOffset.of("+02:00")
。LocalDate
在上面给出的所有解决方案中,根据需要更换样品,例如LocalDate date = LocalDate.of(2021, 3, 14)
。