J0A*_*NMM 8 python timezone python-3.x python-datetime
我有以下字符串"2017-03-30 08:25:00CET",我想将其转换为日期时间tz感知对象.
根据这个问题,从python 3.2可以只使用datetime模块完成.另外,从文档中我看到了
Run Code Online (Sandbox Code Playgroud)%z | UTC offset in the form +HHMM or -HHMM (empty string if the object is naive). | (empty), +0000, -0400, +1030 %Z | Time zone name (empty string if the object is naive). | (empty), UTC, EST, CST
所以我尝试以下方法
datetime.strptime(dep_dt, '%Y-%m-%d %H:%M:%S%Z')
Run Code Online (Sandbox Code Playgroud)
我没有得到任何错误,但是我得到的对象不是tz意识到的
datetime.datetime(2017, 3, 30, 8, 25)
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我将我的字符串转换为"2017-03-30 08:25:00+0200"然后将其转换为对象
datetime.strptime(dep_dt, '%Y-%m-%d %H:%M:%S%z')
我确实得到了一个tz感知的日期时间:
datetime.datetime(2017, 3, 30, 8, 25, tzinfo=datetime.timezone(datetime.timedelta(0, 7200)))
Run Code Online (Sandbox Code Playgroud)
任何想法为什么它适用%z但不与%Z?我究竟做错了什么?
从tzinfo给出的信息来看,它%Z不像您输入字符串那样工作"UTC",它将返回具有正确时区的日期时间实例。
pytz为您的问题提供了可能的解决方案。然而,文档称,不能保证您的时区将被日期时间识别,并建议尽可能长时间地使用 UTC。
解决方案使用pytz:
from datetime import datetime
from pytz import timezone
dep_dt = '2017-03-30 08:25:00CET'
dt = datetime.strptime(dep_dt, '%Y-%m-%d %H:%M:%S%Z')
timezone(dep_dt[19:]).localize(dt)
Run Code Online (Sandbox Code Playgroud)
出去:
datetime.datetime(2017, 3, 30, 8, 25, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2981 次 |
| 最近记录: |