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)
中,并在检索时根据请求者将其转换为所需的时区。如果您必须处理多个时区,这将帮助您在将来扩展日期时间功能。
我需要解析以下格式的日期字符串。
"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)
中,并在检索时根据请求者将其转换为所需的时区。如果您必须处理多个时区,这将帮助您在将来扩展日期时间功能。