首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LocalDateTimeDeserializer从jsr310反序列化祖鲁日期是否正确?

LocalDateTimeDeserializer从jsr310反序列化祖鲁日期是否正确?
EN

Stack Overflow用户
提问于 2017-07-18 10:54:30
回答 2查看 317关注 0票数 1

我有一个角/弹簧引导应用程序,在客户端,我使用一个primeng日历输入组件,它获取本地日期并将其转换为UTC分区日期-时间。然后,我将此日期发送给REST控制器,并使用LocalDateTimeDeserializer对其进行反序列化。问题是,它只是将日期作为-原样,而实际上并不关心服务器时区(因此UTC日期时间变成了本地日期时间)。

我查看了源代码,下面是负责的代码片段:

代码语言:javascript
复制
if (string.endsWith("Z")) {
    return LocalDateTime.ofInstant(Instant.parse(string), ZoneOffset.UTC);
}

应该是:

代码语言:javascript
复制
if (string.endsWith("Z")) {
    return LocalDateTime.ofInstant(Instant.parse(string), ZoneOffset.of(ZoneId.systemDefault().getId()));
}

或者类似的东西?

或者,关于LocalDateTime/时区的整个概念,我还没有了解到什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-18 11:05:12

不,这样做是对的,海事组织。

LocalDateTime不是“服务器本地的”,而是“不在任何特定的时区”。如果您有一个文本值,它指示日期/时间和任何类型的时区指示符(例如,来自UTC的偏移量或时区ID),那么向LocalDateTime的最适当转换就是忽略偏移量/ID。

代码语言:javascript
复制
2017-07-18T12:04:00+01:00

这是一个2017-07-18T12:04:00的LocalDateTime,UTC的偏移量为+1。所以我希望将它解析为一个LocalDateTime,会给出一个2017-07-18T12:04:00的结果。

不过,我个人不想这么做:将文本数据解析为最合适的值,然后以任何您想要的方式更改为不同类型的值。因此,如果输入文本始终具有UTC偏移量(可能将Z用于0),则将其解析为OffsetDateTime,然后决定如何将其转换为LocalDateTime,代码将更加清晰。

基本上,将“将表示从文本转换为内存中”和“更改所表示的内容”分离为不同的操作。

票数 3
EN

Stack Overflow用户

发布于 2017-07-18 11:04:49

DateTime以Z结尾是表示Zulu时区的一种标准方法,这是UTC时区的另一个名称,因此原始片段是正确的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45164739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档