等同于 GNU coreutils /bin/date 输出 Python2(时区)
Equivalent of GNU coreutils /bin/date output with Python2 (timezone)
我想要日期时间格式类似于 Python2 中的 %F %T %Z
。如果我天真地使用 datetime.now()
进行操作,时区部分将显示为空。我了解到 Python2 不支持 tzinfo
对象,但有一个第 3 方 pytz
模块。
不幸的是,为了构建 tzinfo
和 pytz
我仍然需要明确命名时区。我想要的是 localtime()
和 default tzinfo
的组合,这样我就可以得到本地时区的当前时间。
比较以下三个输出:
>>> from datetime import datetime
>>> datetime.now().strftime("%F %T %Z")
"2016-01-11 16:13:22 "
>>> import pytz
>>> datetime.now(pytz.timezone('CET')).strftime("%F %T %Z")
"2016-01-11 16:13:37 CET"
>>> from time import localtime
>>> datetime(*(localtime()[:7])).strftime("%F %T %Z")
"2016-01-11 16:14:24 "
第二个是我想要的,不需要明确指定时区。另一方面,/bin/date
不需要任何提示来查找时区:
$ /bin/date
Mo 11. Jan 16:17:31 CET 2016
查看 date(1)
的源代码我可以看到,当使用 glibc 编译时,它依赖于 tm_zone
字段作为 struct tm
的一部分,但否则将需要 TZ
要设置的环境变量。
关于如何使用 Python2 w/o 硬编码时区的任何想法?
在具有 /bin/date
(non-Windows) 的平台上,以给定格式打印当前本地时间:
>>> import time
>>> time.strftime('%F %T %Z')
'2016-01-12 08:12:50 CET'
要可移植地复制它,您需要 tzlocal
找到与您当地时区相对应的 pytz
tzinfo:
#!/usr/bin/env python
from datetime import datetime
import tzlocal # pip install tzlocal
local_time = datetime.now(tzlocal.get_localzone())
print(local_time.strftime('%Y-%m-%d %H:%M:%S%z (%Z)'))
# -> 2016-01-12 08:12:51+0100 (CET)
%F
, %T
不可移植。
即使在本地时间可能不明确的 DST 转换期间,此代码也能正常工作。
我想要日期时间格式类似于 Python2 中的 %F %T %Z
。如果我天真地使用 datetime.now()
进行操作,时区部分将显示为空。我了解到 Python2 不支持 tzinfo
对象,但有一个第 3 方 pytz
模块。
不幸的是,为了构建 tzinfo
和 pytz
我仍然需要明确命名时区。我想要的是 localtime()
和 default tzinfo
的组合,这样我就可以得到本地时区的当前时间。
比较以下三个输出:
>>> from datetime import datetime
>>> datetime.now().strftime("%F %T %Z")
"2016-01-11 16:13:22 "
>>> import pytz
>>> datetime.now(pytz.timezone('CET')).strftime("%F %T %Z")
"2016-01-11 16:13:37 CET"
>>> from time import localtime
>>> datetime(*(localtime()[:7])).strftime("%F %T %Z")
"2016-01-11 16:14:24 "
第二个是我想要的,不需要明确指定时区。另一方面,/bin/date
不需要任何提示来查找时区:
$ /bin/date
Mo 11. Jan 16:17:31 CET 2016
查看 date(1)
的源代码我可以看到,当使用 glibc 编译时,它依赖于 tm_zone
字段作为 struct tm
的一部分,但否则将需要 TZ
要设置的环境变量。
关于如何使用 Python2 w/o 硬编码时区的任何想法?
在具有 /bin/date
(non-Windows) 的平台上,以给定格式打印当前本地时间:
>>> import time
>>> time.strftime('%F %T %Z')
'2016-01-12 08:12:50 CET'
要可移植地复制它,您需要 tzlocal
找到与您当地时区相对应的 pytz
tzinfo:
#!/usr/bin/env python
from datetime import datetime
import tzlocal # pip install tzlocal
local_time = datetime.now(tzlocal.get_localzone())
print(local_time.strftime('%Y-%m-%d %H:%M:%S%z (%Z)'))
# -> 2016-01-12 08:12:51+0100 (CET)
%F
, %T
不可移植。
即使在本地时间可能不明确的 DST 转换期间,此代码也能正常工作。