我在本地开发了一个应用程序(这是我的第一个真实的商业应用程序),并将时间戳设置为O/S使用的时区。当我将应用程序放在托管在不同时区的服务器上时,我没有说明NOW()
和TIMESTAMP
会产生不同日期的事实。
在阅读了有关我的问题后,处理此问题的正确方法是将日期/时间戳存储在UTC中,并将其在客户端代码上将其转换为所需的指定时区。不幸的是,我的应用程序很长一段时间,我有1000个条目盖在一个特定的时区,在那里我通过以下方式解决了一个hacky修复:
SET time_zone='-6:00'
现在我正在与DST挣扎(因为MySQL Server不支持我正在使用的时区名称)。
我是否应该尝试将所有代码转换为将UTC->时区和所有数据库转换为UTC?还是我应该让主机安装处理DST的合适时区名称?
如果我是您,尽管我会将您的代码转换为使用UTC中的存储/retrediving所有时间值,然后适当地调整数据库中的值。
我知道这是一个PITA,但是从长远来看,它可能会更少头痛。
现在可能会受到伤害,但是正确的转换维护UTC中的所有内容都是必经之路。除非您的应用只需要再运行几天。您将需要在美国切换到非二次之前进行管理。在UTC中维护系统将节省大量时间。祝你好运。