作为输入,我有两个时间戳字符串,一个是本地时间,另一个是UTC时间。我希望得到它们之间的差异(基本上是为了获得本地时区偏移)作为特定格式的字符串,例如+1100或-0500。
import datetime
local = '2018-01-31 18:34:42.172'
utc = '2018-01-31 23:34:42.172'
local_dt = datetime.datetime.strptime(local, '%Y-%m-%d %H:%M:%S.%f')
utc_dt = datetime.datetime.strptime(utc, '%Y-%m-%d %H:%M:%S.%f')
offset_timedelta = local_dt - utc_dt
offset = offset_timedelta.total_seconds() / 3600
offset
Out[8]: -5.0
使用timedelta我可以得到浮点数(例如上面的-5.0)。从那里我可能会创建一个函数来将float转换为我想要的格式的字符串,但我很好奇是否有任何datetime / timedelta方法或我缺少的格式,或者某些字符串格式可以完成这项工作代码更清晰,效率更高。
任何帮助将不胜感激。
编辑,因为我看到我的问题不明确: 有没有办法获得" -0500"我需要(特定格式的字符串,而不是浮点数),是通过日期时间库还是字符串格式化?
答案 0 :(得分:1)
你实际上已经完成了所有的工作。但您可以使用模块dateutil
来隐藏凌乱的细节:
>>> local = '2018-01-31 18:34:42.172'
>>> utc = '2018-01-31 23:34:42.172'
>>> from dateutil import parser, relativedelta
>>> tzh=relativedelta.relativedelta(parser.parse(local), parser.parse(utc))
>>> tzh
relativedelta(hours=-5)
按照您想要的方式格式化:
>>> f"{tzh.hours:+03d}{abs(tzh.minutes):02d}"
'-0500'
或者,Python 2.6到3.5:
>>> "{hours:+03d}{minutes:02d}".format(hours=tzh.hours, minutes=abs(tzh.minutes))
'-0500'
模块dateutil
不在标准库中,但值得下载的麻烦。它可以做得远远不止于此。