我已经有这个问题很长一段时间了。问题是这样的:我使用过的大多数SQL服务器(即MySQL)都没有存储带有日期的时区信息,因此我假设它们只是将日期存储为相对于服务器本地时区的日期。如果我必须将服务器迁移到不同的时区,或者如果我创建的服务器分布在不同的数据中心,或者我需要将日期/时间正确地转换为本地值,则会产生一个有趣的问题。
例如,如果我保留2011-08-12 12:00:00 GMT-7
之类的日期,则会将其保留为2011-08-12 12:00:00
。如果我在特定时间发生了一个世界各地的事件,我必须假设我的服务器在GMT-0700中存储日期,(我们甚至不将夏令时添加到混合中)然后将它们转换为日期,具体取决于每个用户的本地时区。如果我有多个服务器在他们自己的时区存储日期,所有这些都失败了。
对于像Hibernate和Django这样的框架,如果有的话,他们如何处理这个问题呢?我错过了什么,或者这是一个重大问题?
答案 0 :(得分:4)
我认为,最好的选择是:
在我目前的项目中,我们遇到了这个问题(我们使用Postgres)并决定以UTC格式存储所有时间并根据需要在应用程序中进行转换。没有为我们单独存储时区。我们还决定使用时间戳的所有客户端 - 服务器交互都是UTC,并且仅考虑用户交互的本地时区。到目前为止,这已经很好了。
由于您使用Django标记了此问题,我将补充说pytz
模块对于处理区域设置时区转换非常有用。
答案 1 :(得分:0)
您对MySQL的回答位于此页面MySQL Server Time Zone Support
基本上,MySQL为使用UTC(时间戳)字段的任何字段提供自动时区支持,但不为没有(日期,时间和日期时间字段)的字段提供自动时区支持。对于UTC字段,您可以使用SET time_zone = timezone;
从客户端设置时区。对于nonUTC字段,您必须自己计算。
答案 2 :(得分:0)
你是对的我经常遇到这种情况并倾向于查看TZ并将其存储在静态“VARS”表中,所以至少我可以稍后移动它。
附注:
HTH