我试图自动获取本地时区偏移但是遇到了麻烦.我试过了:
print time.timezone/3600
Run Code Online (Sandbox Code Playgroud)
这会得到(当前错误的)偏移,因为它不会自动调整夏令时和非夏令时.
我也尝试过:
now_utc = pytz.utc.localize(datetime.datetime.now())
now_mst = now_utc.astimezone(pytz.timezone('US/Mountain'))
Run Code Online (Sandbox Code Playgroud)
这会得到正确的偏移值,但我想自动设置'US/Mountain'部分,所以我不必手动输入任何东西来获得偏移量.
有没有办法获得正确的偏移量,可以自动调整DST和非DST?
我将在不同地理位置的多台服务器上运行此脚本,如果可以,我想自动获取tz偏移量.
我在玩 Google App Engine,我了解到时区固定为 UTC。我想确定用户本地时区当天的开始和结束时间。所以基本上,给定 UTC 的当前时间,您如何确定当天的开始和结束时间,同时考虑到夏令时转换。
我有一些笨重的示例代码。请注意,我意识到如果我手动指定日期,我也可以指定明天的日期,但它们是示例,我想以编程方式确定它。我的主要问题是,如果我将 timedelta 添加到带有时区的日期时间,然后对其进行标准化(就像 pytz 文档中所建议的那样),我会得到一个日期时间,在夏令时切换期间关闭一小时。
代码中没有提到,但最终目的是将这些时间转换回 UTC,这就是为什么了解时区很重要的原因。
#!/usr/bin/python
import datetime
from pytz.gae import pytz
hobart_tz = pytz.timezone('Australia/Hobart')
utc_dt = pytz.utc.localize(datetime.datetime.utcnow())
hobart_dt = utc_dt.astimezone(hobart_tz)
# create a new datetime for the start of the day and add a day to it to get tomorrow.
today_start = datetime.datetime(hobart_dt.year, hobart_dt.month, hobart_dt.day)
today_start = hobart_tz.localize(today_start)
today_end = hobart_tz.normalize(today_start + datetime.timedelta(days=1))
print 'today:', today_start
print ' next:', today_end
print
# gives:
# today: 2011-08-28 00:00:00+10:00
# next: 2011-08-29 …Run Code Online (Sandbox Code Playgroud) 我想打印时区.我用%Z但不打印:
import datetime
now = datetime.datetime.now()
print now.strftime("%d-%m-%Y")
print now.strftime("%d-%b-%Y")
print now.strftime("%a,%d-%b-%Y %I:%M:%S %Z") # %Z doesn't work
Run Code Online (Sandbox Code Playgroud)
我可能需要导入pytz吗?
基于我问的这个相关问题和答案,很明显datetime.fromtimestamp(os.path.getctime())在 Python 3.4 中不返回时区感知日期时间对象,但是,根据一些调查,我还发现 HFS+ 文件系统上的 OS X 10.9(例如)似乎与 ctimes 一起维护时区(除非 gls 从我的本地时区和夏令时推断时区):
$ gls -l --full-time -c
-rw------- 1 myuser staff 538 2015-01-04 17:12:57.000000000 +0100 fileone
-rwxr-xr-x 17 myuser staff 578 2015-05-20 06:41:07.000000000 +0200 filetwo
Run Code Online (Sandbox Code Playgroud)
(我正在使用ls 的 GNU 版本)
如何从 ctime 获取时区并将其插入/组合到 datetime 对象中?
(我也想为 mtime 提供相同的答案,我认为它会相似)。