UTC时间,时区,夏令时和夏令时切换日期

我正在构建一个应用程序,可以在任何特定的当地时间将电子邮件发送到世界任何地方。

例如,我的每日时间表(本地时间):

  • 8:00 AM - 在加拿大多伦多发送电子邮件给约翰
  • 西部标准时间上午9:15(澳大利亚) - 在澳大利亚珀斯发送电子邮件给鲍勃
  • 10:12 PM - 向摩洛哥拉巴特的Anas发送电子邮件
  • 我希望能够在单个位置(例如圣保罗,巴西)和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以适应这些更改。

    是否有一个权威的Web服务或一组表可以帮助我保持这些时区变更与我希望每天在同一时间向不同时区的用户提供不同时间段的电子邮件以实现夏令时的不同切换日期同步?


    大多数编程语言都允许您访问时区转换功能。 最基本的只在UTC和服务器的“本地”时区之间起作用,因此您需要一个全功能的时区,例如Python的pytz,它允许您指定具有时区名称的本地时间(例如“America /多伦多“)并将其转换为UTC。 鉴于此,您不必担心不同时区的UTC偏移(包括历史偏移,如果它们已更改),也不需要DST开始结束时间:图书馆将为您处理它。 只要确保你有最新的数据库,它包含在tzdata包中。

    至于你的crontab,如果运行cron的服务器上的本地时区是UTC,那么你可能是最好的,这样你可以直接把UTC时间放在crontab中。 另一方面,根据您拥有的事件的数量,我会建议让cron按照固定的时间间隔(例如每5分钟一次)运行您的代码,然后您的代码根据这些数据计算出需要触发的事件当前UTC时间和数据库的内容。 那么服务器的时区是什么并不重要。


    有没有权威的网络服务或一些表格的地方...

    不,没有什么是“权威性的”,但有一些关系。 它被称为TZ数据库,目前正在IANA的监督之下。 它的主页在这里。

    它也被称为tzdata,zoneinfo,timezonedb,tzdb,Olson数据库或IANA时区数据库。

    几乎所有可以想象的语言和平台都有实现。 你可以在tzdb的tz-link文件中阅读更多内容,以及在时区标签wiki中,这里可以阅读StackOverflow。

    链接地址: http://www.djcxy.com/p/29359.html

    上一篇: UTC Time, Timezones, Daylight Savings, and Daylight Savings switchover dates

    下一篇: Timezone and Daylight Savings Issues