将timedelta格式化为时区偏移字符串

时间:2018-02-03 22:50:55

标签: python datetime string-formatting timedelta

作为输入,我有两个时间戳字符串,一个是本地时间,另一个是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"我需要(特定格式的字符串,而不是浮点数),是通过日期时间库还是字符串格式化?

1 个答案:

答案 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不在标准库中,但值得下载的麻烦。它可以做得远远不止于此。