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

Format timedelta as time zone offset string

作为输入,我有两个时间戳字符串,一个是当地时间,另一个是 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)。从那里我可能会创建一个函数来将浮点数转换为我想要的格式的字符串,但我很好奇是否有任何 datetime/timedelta 方法或我缺少的格式,或者一些字符串格式可以用更干净的方式完成工作代码更高效

如有任何帮助,我们将不胜感激。

编辑,因为我看到我的问题不清楚: 有没有办法通过日期时间库或字符串格式获取我需要的“-0500”(特定格式的字符串,而不是浮点数)?

你实际上已经完成了所有的工作。但是你可以使用模块 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 不在标准库中,但值得下载。它能做的远远不止这些。