我有一个包含500多个表的大型应用程序,我必须将应用程序转换为时区感知(当前应用程序使用new java.util.Date()
,GETDATE()
使用服务器的时区)。即没有任何时区支持。
我已将此任务分为几个步骤以便于开发,我的第一步确定步骤是根据服务器的时区将所有旧日期更改为UTC
。 (主要位于一个时区,所以这是我最好的猜测)
接下来,我需要修改数据库和应用程序代码以使用时区名称和偏移量保存UTC中的所有日期,这就是我的问题所在......
我将如何修改数据库/表格以便以良好的方式支持这一点?
我的想法是:
pk
,TABLE_NAME
,COL_NAME
,ROW_PK
,TZ_NAME
,TZ_OFFSET
列的表格
有没有人有其他想法或最佳做法?
答案 0 :(得分:1)
根据我的经验,您通常应将数据存储为UTC,并将相关时区存储在单独的列中。拥有时区表和存储时区密钥是合理的关系数据库。
在这种情况下,您的所有数据都已在本地时间,因此在这种情况下,您可以将本地时间存储在时间列中,并为时区添加一列。这样您就不必转换数据库中已有的日期。
不需要存储偏移,除非您最终注意到从日期和区域转换为偏移太耗时。