gpt4 book ai didi

python - 从任何时区的字符串中获取自纪元以来的秒数

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:40 24 4
gpt4 key购买 nike

我需要根据格式正确的字符串计算自纪元以来的秒数,例如 u'Wed Jun 24 20:19:10 PDT 2015'。以下代码执行此操作:

def seconds_from_epoch(date, date_pattern='%a %b %d %H:%M:%S %Z %Y'):
epoch = int(time.mktime(time.strptime(date, date_pattern)))
return epoch

>>> d=u'Wed Jun 24 20:19:10 PDT 2015'
>>> s=seconds_from_epoch(d)
>>> s
1435202350

问题是字符串来自不可预测的各种时区,并且上述解决方案仅在时区与正在运行的 Python 脚本本身的时区相同时才有效(或者显然是 GMT/UTC,这无济于事) .

所以我需要的是与上面的代码完全相同的东西,但适用于所有时区。

最佳答案

dateutil 解析器几乎可以将任何字符串转换为 datetime 对象,因此您甚至可以放宽格式良好的约束;但无论如何,Python 3 中的 datetime 对象有方便的 timestamp 方法:

>>> d = dateutil.parser.parse('Wed Jun 24 20:19:10 PDT 2015')
>>> d.timestamp()
1435166350.0
>>> d = dateutil.parser.parse('Wed Jun 24 20:19:10 UTC 2015')
>>> d.timestamp()
1435177150.0

由于您可能使用的是 Python 2,这里是一个手动计算:

>>> d = dateutil.parser.parse('Wed Jun 24 20:19:10 PDT 2015')
>>> (d - datetime.datetime(1970, 1, 1)).total_seconds()
Traceback (most recent call last):
...
TypeError: cant subtract offset-naive and offset-aware datetimes
>>> # :(
>>> (d - datetime.datetime(1970, 1, 1, tzinfo=d.tzinfo)).total_seconds()
1435177150.0 # UTC
>>> ((d - datetime.datetime(1970, 1, 1, tzinfo=d.tzinfo)) - d.utcoffset()).total_seconds()
1435166350.0 # The original timezone

关于python - 从任何时区的字符串中获取自纪元以来的秒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31062511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com