在时区中解析 DateTime
Parsing a DateTime in a time-zone
我有一个来自 Los_Angeles 的日期时间。尽可能适用夏令时。我正在尝试将该日期时间转换为时间戳,但我似乎不理解 Java 8 DateTime API。以下片段 returns 1238112000
(如果以 UTC 指定,则为正确日期)。我应该更改什么以改为显示 1238137200
?
String date = "March 27, 2009 00:00:00";
DateTimeFormatter formatter = DateTimeFormatter.
ofPattern("MMMM dd, yyyy HH:mm:ss", Locale.ENGLISH).
withZone(ZoneId.of("America/Los_Angeles"));
LocalDateTime.parse(date, formatter).toEpochSecond(ZoneOffset.UTC))
通过将日期解析为 LocalDateTime
,您将忽略来自格式化程序的时区信息。你应该使用 ZonedDateTime
:
public static void main(String[] args) {
String date = "March 27, 2009 00:00:00";
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("MMMM dd, yyyy HH:mm:ss", Locale.ENGLISH)
.withZone(ZoneId.of("America/Los_Angeles"));
long second = ZonedDateTime.parse(date, formatter).toEpochSecond();
System.out.println(second); // prints "1238137200"
}
在返回的实例上,您可以调用 toEpochSecond()
。
我有一个来自 Los_Angeles 的日期时间。尽可能适用夏令时。我正在尝试将该日期时间转换为时间戳,但我似乎不理解 Java 8 DateTime API。以下片段 returns 1238112000
(如果以 UTC 指定,则为正确日期)。我应该更改什么以改为显示 1238137200
?
String date = "March 27, 2009 00:00:00";
DateTimeFormatter formatter = DateTimeFormatter.
ofPattern("MMMM dd, yyyy HH:mm:ss", Locale.ENGLISH).
withZone(ZoneId.of("America/Los_Angeles"));
LocalDateTime.parse(date, formatter).toEpochSecond(ZoneOffset.UTC))
通过将日期解析为 LocalDateTime
,您将忽略来自格式化程序的时区信息。你应该使用 ZonedDateTime
:
public static void main(String[] args) {
String date = "March 27, 2009 00:00:00";
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("MMMM dd, yyyy HH:mm:ss", Locale.ENGLISH)
.withZone(ZoneId.of("America/Los_Angeles"));
long second = ZonedDateTime.parse(date, formatter).toEpochSecond();
System.out.println(second); // prints "1238137200"
}
在返回的实例上,您可以调用 toEpochSecond()
。