我遇到一个问题,试图弄清楚在UTC中将时间存储在数据库中并处理DST更改的逻辑。
我在数据库中有TimeStart和TimeEnd,它们指示营业时间。如果我节省了DST的时间,而没有节省DST的时间,则会出现问题。如果我在10月15日保存 09:00-17:00 ,则结果为 07:00-15:00 (UTC),但是如果我现在添加营业时间,它不是DST,将导致 08:00-16:00 (UTC)。我以为,考虑到夏令时,将瞬间转换为UTC会得到一致的结果,但是我错了。
在前端/后端处理该问题的最佳解决方案是什么。我应该减去增加的DST时间吗?因为使用矩来处理到UTC的转换无济于事,因为它仍然会产生1个小时的时差(现在,我质疑到目前为止我对UTC时间所做的一切,因为可能由于此问题而出现问题)。
谢谢
答案 0 :(得分:2)
“始终使用UTC”的建议是短视的。 不有很多情况下不使用UTC,您所描述的情况肯定是其中之一。事实是,UTC不利于将来的日程安排-尤其是对于重复模式。
仅存储工作时间的本地开始和结束时间,而不带日期。您可能还需要存储该公司所在位置的时区标识符(例如"America/Los_Angeles"
)。
在确定特定日期的营业时间时,然后将数据库中的时间应用于营业所在时区中的日期。要了解企业是否营业,请将结果转换为UTC以针对当前UTC时间进行测试。
答案 1 :(得分:1)
由于我没有简单地发表评论所必需的声誉,我想我会写一个实际的答案。 (免责声明:我实际上并没有使用moment.js)
我建议您始终将时间以UTC格式存储在数据库中。在前端显示/存储时应进行转换。
有关如何处理DST的更多信息,我发现了这个很好的问题,答案很多。您应该能够将此处提到的很多内容应用于任何堆栈: Daylight saving time and time zone best practices
给出问题的详细信息,很难告诉您错误在哪里,您仍然会得到错误的值。