我有一个脚本,可以读取数据库并在特定时间向用户发送短信,我的服务器在伦敦,我的国家危地马拉在(-6小时),我使用:
local_time = datetime.datetime.utcnow() + datetime.timedelta(hours=-6)
我担心日光可能会改变,我的短信发送错误
有什么办法控制这种情况吗?
您可以使用pytz
等库来检查本地时间,而不是
>>> from pytz import timezone
>>> tz= timezone('America/Guatemala')
>>> from datetime import datetime
>>> tz.fromutc( datetime.utcnow() )
datetime.datetime(2014, 4, 22, 12, 4, 37, 2229, tzinfo=<DstTzInfo 'America/Guatemala' CST-1 day, 18:00:00 STD>)
库的准确性与底层时区数据库的准确性一样好,所以如果它不适合您的目的,请考虑为其做出贡献。
获取给定时区的当前时间:
from datetime import datetime
import pytz # $ pip install pytz
now = datetime.now(pytz.timezone('America/Guatemala'))
示例:
>>> print(now.strftime('%F %T %Z%z'))
2014-04-23 01:04:46 CST-0600
在带有tz数据库的*nix上,您可以更改本地时区(仅限stdlib解决方案):
import os
import time
from datetime import datetime, timezone
os.environ['TZ'] = ':America/Guatemala'
time.tzset()
# to get local time
print(datetime.now(timezone.utc).astimezone().strftime('%F %T %Z%z'))
# -> 2014-04-23 01:12:38 CST-0600