我有一个Web API,可以以ISO 8601兼容字符串的形式返回时区感知时间数据。我有两个选项,返回时间数据和偏移量,以及返回时间数据转换为UTC(祖鲁时间)。
示例,我想在东部时间下午5:16:00返回时间。
选项1:“2014-05-06T17:16:00-04:00”
选项2:“2014-05-06T21:16:00Z”
哪个更好?哪个更受欢迎?
无论哪种方式,我的客户都可以。但我想了解你哪个更好的选择,以及你的偏好背后的推理。
我认为选项1更好,因为它提供了有关时区的其他信息。在此示例中,假设所有各方都在美国,您知道时区是基于日期和-4:00偏移的东部时间。
答案 0 :(得分:3)
这似乎有点基于意见,但根据我的经验,最好始终使用UTC进行操作,并仅在向用户显示时间之前转换为本地时间。
这使您的课程知识更少,知识更少,灵活性更高。在这种情况下,客户不必了解服务器的时区。如果你有一个每个日期时间变量保持UTC(表示层除外)的不变量,它也会使代码清晰易用。
管理时间和时区通常只是在某些时刻出现的错误来源(如DST更改),因此它可能是意外的,并在部署后的几个月内发生。最好保持这些部件尽可能简单,并经过全面测试。
答案 1 :(得分:2)
这在很大程度上取决于您的API尝试表示的内容。 上下文是关键
如果你需要表示的只是"确切的时间点发生了",然后发回调整为UTC的值,尾随Z
。
示例:用户点击您网站上特定网页的时间。
如果您需要表示某个特定当地时间发生的事情,请发回当地时间,并附上一个尾随偏移量。
示例:员工上班的时间。
任一选项都是有效的ISO-8601格式,两者都代表了一个独特的时刻。唯一的区别是本地+偏移格式保留了原始观察者的视角。