首页 文章

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

提问于
浏览
0

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

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

  • 上午8:00 - 发送电子邮件给加拿大多伦多的John

  • 9:15 AM西部标准时间(澳大利亚) - 发送电子邮件给澳大利亚珀斯的鲍勃

  • 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以适应这些变化 .

在某个地方是否有权威的网络服务或一组表格可以帮助我保持这些时区变化与我每天在同一当地时间向不同时区的用户发送电子邮件的愿望同步,以及夏令时的不同切换日期?

2 回答

  • 0

    大多数编程语言都允许您访问时区转换功能 . 最基本的只能在UTC和服务器的"local"时区之间工作,所以你需要一个全功能的,例如Python的pytz,它可以让你指定一个带有时区名称的本地时间(例如"America/Toronto")并转换它到你的UTC . 鉴于此,你没有改变,也没有DST开始结束时间:图书馆会为你照顾它 . 只需确保您拥有最新的数据库,该数据库包含在tzdata包中 .

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

  • 1

    某处有权威的Web服务或表集吗?

    不,没有什么"authoritative",但有一些接近 . 它被称为TZ database,目前正受到IANA的监督 . Its home page is here .

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

    您可以想象几乎所有语言和平台的实现 . 您可以在the tz-link file from the tzdbtimezone tag wiki, here on StackOverflow中阅读更多内容 .

相关问题