如何创建自 unix 纪元以来给定秒数的日期时间对象?
How to create a datetime object given seconds since unix epoch?
网上似乎有很多关于做一个非常基本的事情的混淆:创建一个带有 UTC 时区的日期时间对象,给定自 UTC 时区的 unix 纪元以来的秒数。基本上,我总是想在绝对 time/UTC.
中工作
我正在使用 python 3.5(目前最新的)并且想简单地从浮点值获取 UTC(+0/Zulu 偏移量)上下文中的 datetime
对象自 1970 年 1 月 1 日以来经过的秒数。
这是错误的,因为第一次是在我当地的时区创建的,然后我尝试切换到 UTC。
import datetime
import pytz
dt = datetime.datetime.fromtimestamp(my_seconds).replace(tzinfo=pytz.UTC)
Python 为这种情况提供了方法 utcfromtimestamp
。 utcfromtimestamp
import datetime
seconds = 0
utcdate_from_timestamp = datetime.datetime.utcfromtimestamp(seconds)
如果 my_seconds
是 POSIX 时间戳,则在 Python 中将其转换为 datetime
3:
#!/usr/bin/env python3
from datetime import datetime, timedelta, timezone
utc_dt = datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=my_seconds)
utc_dt = datetime.fromtimestamp(my_seconds, timezone.utc)
naive_utc_dt = datetime.utcfromtimestamp(my_seconds)
如果您当地的时区是 "right"(非 POSIX),那么只有第一个公式是正确的(其他人将 my_seconds
解释为 TAI 时间戳 datetime(1970, 1, 1, 0, 0, 10)
TAI在这种情况下是纪元)。
The first formula is more portable and may support a wider input range than the others.
由于rounding errors on some Python versions,第一个和第二个表达式的结果可能不同。
第二次和第三次调用应该仅在 tzinfo
属性上有所不同(后者 returns 一个简单的日期时间对象 (.tzinfo is None
))。您应该更喜欢时区感知的日期时间对象,以避免歧义。
网上似乎有很多关于做一个非常基本的事情的混淆:创建一个带有 UTC 时区的日期时间对象,给定自 UTC 时区的 unix 纪元以来的秒数。基本上,我总是想在绝对 time/UTC.
中工作我正在使用 python 3.5(目前最新的)并且想简单地从浮点值获取 UTC(+0/Zulu 偏移量)上下文中的 datetime
对象自 1970 年 1 月 1 日以来经过的秒数。
这是错误的,因为第一次是在我当地的时区创建的,然后我尝试切换到 UTC。
import datetime
import pytz
dt = datetime.datetime.fromtimestamp(my_seconds).replace(tzinfo=pytz.UTC)
Python 为这种情况提供了方法 utcfromtimestamp
。 utcfromtimestamp
import datetime
seconds = 0
utcdate_from_timestamp = datetime.datetime.utcfromtimestamp(seconds)
如果 my_seconds
是 POSIX 时间戳,则在 Python 中将其转换为 datetime
3:
#!/usr/bin/env python3
from datetime import datetime, timedelta, timezone
utc_dt = datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=my_seconds)
utc_dt = datetime.fromtimestamp(my_seconds, timezone.utc)
naive_utc_dt = datetime.utcfromtimestamp(my_seconds)
如果您当地的时区是 "right"(非 POSIX),那么只有第一个公式是正确的(其他人将 my_seconds
解释为 TAI 时间戳 datetime(1970, 1, 1, 0, 0, 10)
TAI在这种情况下是纪元)。
The first formula is more portable and may support a wider input range than the others.
由于rounding errors on some Python versions,第一个和第二个表达式的结果可能不同。
第二次和第三次调用应该仅在 tzinfo
属性上有所不同(后者 returns 一个简单的日期时间对象 (.tzinfo is None
))。您应该更喜欢时区感知的日期时间对象,以避免歧义。