Java 解析 DateTime 并忽略时区

Java parse DateTime and ignore timezone

我需要解析以下格式的日期字符串。

"2016-05-19 13:07:15 PDT"

我的数据库服务器在 ET 中,但我想将 TIMESTAMP 2016-05-19 13:07:15 存储在我的数据库中,不带时区,也不将其转换为 ET。所以,基本上,我想忽略字符串中的 PDT。

目前,我将字符串解析为 ZonedDateTime 对象并将其映射到数据库中的 TIMESTAMP 数据类型,但 hibernate 正在后端进行一些转换,因为它知道我的 ZonedDateTime 在 PDT 中。因此,上面示例中的日期最终以 2016-05-19 16:07:15 的形式存储在我的数据库中,而不是我想要的 2016-05-19 13:07:15.

我想到的一个想法是将 PDT 从字符串末尾剥离,然后将其解析为 LocalDateTime,但在我这样做之前,我想看看是否有基本上忽略 ZonedDateTime 中的时区或将上面显示的字符串解析为 LocalDateTime(或其他一些不关心时区的 java 时间对象)的任何方法实际进行从 PDT 到 ET 的转换。

有没有什么方法可以实现这一点,而无需在解析之前实际将时区从字符串中拉出?

这个怎么样?

String datestring = "2016-05-19 13:07:15 PDT";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss zzz");

LocalDateTime localDateTime = LocalDateTime.from(formatter.parse(datestring));
System.out.println(localDateTime);
// Output: 2016-05-19T13:07:15

编辑:作为替代方案,如果您已经有一个 ZonedDateTime 对象,这也有效(并删除时区):

LocalDateTime.from(zonedDateTime);

处理不同时区的日期和时间最好的方法是将日期和时间存储在UTC (GMT +0)中,并在检索时根据请求者将其转换为所需的时区。如果您必须处理多个时区,这将帮助您在将来扩展日期时间功能。