如何从任何地方找到特定时区的时间
我需要知道我的Python脚本运行时的当前时间,时间是中央夏令时(CDT)。不过,这个脚本会在多个不同的时区运行,所以简单的时间差计算是行不通的。
我只需要一个适用于Linux的解决方案,但如果能跨平台使用那就更好了。
3 个回答
简单的时间偏移就可以解决问题,你只需要从协调世界时间(UTC)进行偏移。
使用datetime模块,你可以获取当前的UTC(格林威治标准时间)时间,并使用日期时间对象:
datetime.datetime.utcnow() - 这个方法可以提供UTC时间。
datetime.datetime.now() - 这个方法可以提供你本地机器的时间。
要从任何系统获取中部时间(CT),你需要知道中部时间与UTC的偏移量。然后,为了考虑夏令时,你需要编写一个函数来获取当前的偏移量。
>>> import datetime
>>> utc = datetime.datetime.utcnow()
>>> current_ct_offset = get_current_ct_offset()
>>> ct_datetime = utc + datetime.timedelta(hours=current_ct_offset)
我可能漏掉了什么,但如果你只关心一个时区,并且不处理时区名称的话,这个过程其实是相当简单的。
这里的关键是使用 pytz 或 dateutil.tz。基本上,它们的作用就是这样:
>>> from pytz import timezone
>>> mytz = timezone('Europe/Paris')
>>> yourtz = timezone('US/Eastern')
>>> from datetime import datetime
>>> now = datetime.now(mytz)
>>> alsonow = now.astimezone(yourtz)
其实,最难的部分在于搞清楚你处于哪个时区。相比之下,dateutil.tz 在这方面做得更好。
>>> from dateutil.tz import tzlocal, gettz
>>> mytz = tzlocal()
>>> yourtz = gettz('US/Eastern')
如果你想了解为什么时区这么麻烦的所有细节,可以看看这里:
http://regebro.wordpress.com/2007/12/18/python-and-time-zones-fighting-the-beast/
http://regebro.wordpress.com/2008/05/10/python-and-time-zones-part-2-the-beast-returns/
http://regebro.wordpress.com/2008/05/13/thanks-for-the-testing-help-conclusions/
你可以使用 time.gmtime()
这个函数来获取任何机器上的格林威治标准时间(GMT,也就是协调世界时间UTC),无论那台机器在哪个时区。然后你可以根据自己的时区差来调整时间。