46

我正在尝试使用 java 8 或 utils 包将字符串中的日期时间转换为即时。

例如。

String requestTime = "04:30 PM, Sat 5/12/2018";

Instant reqInstant should result in 2018-05-12T20:30:00.000Z

reqString 位于美国/多伦多时区。

这是我尝试过的

 String strReqDelTime = "04:30 PM, Sat 5/12/2018";
 Date date = new SimpleDateFormat("hh:mm a, EEE MM/dd/yyyy").parse(requestTime);
 Instant reqInstant = date.toInstant();

上面的代码导致"2018-05-12T23:30:00Z".

任何帮助表示赞赏。

4

4 回答 4

85
于 2018-05-11T21:35:49.030 回答
2

您的计算机(服务器)中的时区似乎是美国太平洋夏令时(GMT-7),但您希望获得美国东部夏令时(GMT-4)的结果。

Instant.toString() 以 ISO-8601 格式返回 UTC (GMT+0) DateTime。(末尾的“Z”表示 UTC)。

SimpleDateFormat 在未指定时以计算机的默认时区处理 DateTime 字符串。而且您的输入未指定时区。

因此,您需要对输入的时区进行一些处理。

PS。在东部夏令时的我的机器上,你的代码给了我完全符合你预期的结果。

于 2018-05-11T21:51:30.417 回答
0

有关说明,您可以在此处阅读 [https://www.baeldung.com/java-string-to-date]

String requestTime = "04:30 PM, Sat 5/12/2018 America/Toronto";
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm a, EEE M/dd/yyyy z");
            ZonedDateTime zonedDateTime = ZonedDateTime.parse(requestTime, formatter);
            System.out.println(zonedDateTime.toInstant());  
于 2021-11-18T10:05:47.577 回答
0

Instant.parse(String) 格式正确

于 2022-01-14T10:06:15.450 回答