一般来说,以 UTC 格式以及 给你和 给你中提到的格式存储时间是最佳实践。
假设有一个重复发生的事件,比如说结束时间总是在同一个本地时间,比如说17:00,不管这个时区是否有夏令时保存。此外,还有一个要求,不要手动改变时间时,DST 打开或关闭的特定时区。它还要求任何其他系统通过 API (即 GetEndTimeByEvent)请求结束时间时,它总是以 UTC 格式发送结束时间。
方法1: 如果决定 以协调世界时存储,它可以存储在数据库表中,如下所示。
Event UTCEndTime
=====================
ABC 07:00:00
MNO 06:00:00
PQR 04:00:00
对于第一个事件 ABC,协调世界时的结束时间是上午07:00,如果将其转换为显示从协调世界时到当地时间在2012年7月1日它将导致17:00当地时间,如果转换为在2012年10月10日(DST 是开启的日期为时区)那么将导致下午6时,这是不正确的结束时间。
我认为一种可能的方法是将 DST 时间存储在附加列中,并在时区为 DST ON 时使用该时间。
方法2: 但是,如果它是 储存为本地时间如下例如事件 ABC 它将总是17:00在任何日期,因为没有转换到从协调世界时到当地时间。
Event LocalEndTime
=======================
ABC 17:00:00
MNO 16:00:00
PQR 14:00:00
应用程序层将本地时间转换为 UTC 时间,以便通过(API GetEndTimeByEvent)发送到其他系统。
在这种情况下,以 UTC 格式存储时间是否仍然是一个好主意?如果是,那么如何得到一个常数的本地时间?
相关问题: 有没有一个好的理由来存储时间不在 UTC?