我在运行在Windows2008Server上的WindowsServer5.6上添加了时区支持。我已经将默认时区设置为格林尼治标准时间,这很好。此外,我还按照http://dev.mysql.com/downloads/timezones.html的说明获得时区描述表。
时区信息现在存储在mysql数据库中。
我的另一个数据库使用带有外键的Innodb引擎,任何需要日期和时间的字段都以时间戳格式存储。在我的一个名为Company的表中,我需要引用他们的时区。
我有两个问题;
处理这类问题的最佳做法是什么?
发布于 2014-01-31 19:19:57
我应该将时区分配给单个公司,还是分配给该公司所属的城市/州/地区?
这是非常依赖于应用程序的,但通常您应该考虑将时区分配到公司的特定位置。一家拥有多个办事处的公司可能会在不同的时区设置它们。但是,您应该考虑一下这对您特定的用例意味着什么。
通常向某个区域分配时区并不是一个好主意,因为边缘情况太多了。有许多国家和州有多个时区,也有几个城市也有这样的情况(尽管不是很常见)。
通常,时区分配给单个用户或特定事件。这取决于您的应用程序需要什么。
理想情况下,我想链接他们的时区,在任何时候它都是引用一个外来者。但是,如果时区ids等位于mysql数据库中,这是怎么可能的?我不希望普通mysql用户能够访问该数据库。
MySQL使用IANA/Olson时区数据库。(还请参阅时区标记wiki和维基百科。)
因为.Net不使用这些数据,所以如果您想要与数据库对齐,就需要使用库,例如野田时间或TZ4Net。(我强烈推荐野田时间。)
当然,只有当您实际需要处理数据库中的时区时,才需要这样做。通常,你将没有这样的要求。
处理这类问题的最佳做法是什么?
有一个完整的最佳实践清单这里。但是,您应该做的事在很大程度上取决于实际的需求。没有一个合适的答案。
通常,最好的方法是在数据库中存储UTC中的值,并转换到和从某个时区进行显示。在这种情况下,您根本不需要数据库中的时区数据,您可以选择使用IANA时区,也可以选择使用.NET的TimeZoneInfo类附带的Windows。
在数据库中可能需要时区支持的一个例子是,如果您有一些要求,比如“我想要一个按日分组的报表,其中一天是在特定时区的本地定义的。哦,我希望该报告的每个查看者都有自己的数据本地视图,并根据他们对‘一天’的概念进行调整。”
发布于 2014-01-31 14:52:35
在我看来,您不应该尝试通过DB管理Timezone。
如果您在MySQL中使用PHP,您可以轻松地转换时区。对于日期或任何事情:不使用时区!利用和利用时间戳:
http://fr.php.net/time:<?php time(); ?>
你绝对应该看:http://www.youtube.com/watch?v=-5wpm-gesOY
https://stackoverflow.com/questions/21480551
复制相似问题