在时区中解析 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()