所以,我们绝对没有理由在这个时代遇到这个问题,但我们确实如此。我们的数据库有日期时间列,当从数据库中提取日期时,它们将被检索为CDT(一年中的这个时候,冬天的CST)。然后,该时间作为CDT通过JSON传递给UI。这可不错。
存储在数据库中的时间是相对于数据中指定位置的时间。因此,如果我们在美国东部夏令时间晚上6点从洛杉矶旅行到美国东部时间晚上11点,那么开始时间将从数据库中检索为早上6点CDT,结束时间将在晚上11点CDT检索。
要求:
- UI需要在数据的本地时间显示,上一个示例中的上午6点和下午11点。
- 用户界面需要在不久的将来指示项目,例如在接下来的3个小时内到达。
- 编辑数据时,需要以相同的方式输入,用户在洛杉矶进入早上6点,在纽约进入晚上11点。
- 用户还需要能够输入相对于当前时间的时间,例如从现在起5小时内输入“H + 5”。
- UI需要根据时间进行排序。这是一个很好的,因为他们习惯使用的应用程序也没有这样做。
醇>
我们目前的解决方案是将我们的头埋在沙子中并展示它(未经测试用于其他时区的浏览器,例如我们在加利福尼亚办事处的浏览器),这实际上是非常有效的,尽管它在语义上并不完全正确。
- 11PM CDT从数据库中读取
- 显示为11PM,用户理解为EDT
- 用户编辑它,放入10PM
- 它被解析为10PM CDT并按照我们想要的那样保存。
醇>
当前解决方案失败的地方相对于当前时间而言。
- 11PM CDT从数据库中读取
- 显示为11PM,用户理解为EDT
- 用户编辑它,输入“NOW”(假设用户的本地时钟是9PM CDT)
- 它被解析为9PM CDT并以此方式保存,但它应该是10PM,因为它是在纽约的晚上10点!
醇>
我正在寻找一种方法来处理这五个并非完全可怕的案例。我对任何层(上面详述的体系结构)中的解决方案持开放态度,但存在约束,因为我们与另一个应用程序共享数据库。如果有其他工具/框架可用并且与我们已有的工具/框架相符合,我愿意使用它们。
- 数据库:SQL Server 2008
- API:带有JSON响应的Rails
- 前端:JS + Moment +与日期无关的其他内容
- 任何纠正数据和/或架构的尝试都是不可能的,因为我们会破坏其他应用程序。
- 通常可以添加新的视图/表格列/表格/存储过程。
- 不允许添加索引。任何更具异国情调的特征的状态都是未知的。
- 有许多表/端点受此问题影响,因此任何暴力解决方案都将非常繁琐。
- 任何解决方案只需在美国大陆工作。
- 请注意,这不是一个简单的时区转换,因为我们从数据库返回的时区是错误的,因此时区的转换也是错误的。