我正在构建一个应用程序,它可以在任何特定的当地时间向世界任何地方发送电子邮件。
例如,我的每日时间表(当地时间):
我希望能够在单个位置(例如圣保罗,巴西)上和Amazon EC2服务器上执行此代码。
我也知道多伦多在东部标准时间(UTC - 5h),但从2012年3月11日到2012年11月4日,它是在东部夏令时(UTC - 4h)。
我也知道珀斯在西部标准时间(UTC + 8h),没有夏令时。
我也知道拉巴特是在西欧时间(UTC),但是从2012年4月29日到2012年7月20日,2012年8月19日到2012年9月30日,它在西欧夏令时(UTC + 1H)
为了跟踪时区,夏令时等的这些组合,我当然会坚持所有内部服务器时间都是UTC。但是,我需要一些方法来跟踪每个时区管辖区何时以及如何切换时区因为夏令时或(在拉巴特的情况下)斋月,然后调整我的crontabs以适应这些变化。
是否有一个权威的网络服务或一组桌子可以帮助我保持这些时区变化与我每天在同一当地时间向不同时区的用户发送电子邮件的愿望同步,以及夏令时的不同切换日期?
答案 0 :(得分:1)
大多数编程语言都允许您访问时区转换功能。最基本的只能在UTC和服务器的“本地”时区之间工作,因此您需要一个功能齐全的版本,例如Python的pytz,它允许您指定具有时区名称的本地时间(例如“America / Toronto”)并将其转换为UTC。鉴于此,您无需担心不同时区的UTC偏移(包括历史偏移,如果它们已经更改),也不需要担心DST开始结束时间:图书馆将为您处理。只需确保您拥有tzdata包中的最新数据库。
至于你的crontab,如果运行cron的服务器上的本地时区是UTC,你可能最好,这样你可以将UTC时间直接放在crontab中。另一方面,根据您拥有的事件量,我建议让cron以固定的时间间隔(例如每5分钟)运行您的代码,然后您的代码会根据需要确定需要触发的事件。当前UTC时间和数据库的内容。那么服务器的时区是什么并不重要。
答案 1 :(得分:0)
是否有某个权威的Web服务或一组表...
不,没有什么"权威" ,但有些东西很接近。它被称为TZ database,目前正受到IANA的监督。 Its home page is here
它也称为tzdata,zoneinfo,timezonedb,tzdb,Olson数据库或IANA时区数据库。
您可以想象几乎所有语言和平台的实现。您可以在the tz-link file from the tzdb和timezone tag wiki, here on StackOverflow中阅读更多内容。