繁体   English   中英

使用 strftime 将 python 日期时间转换为纪元

[英]Convert python datetime to epoch with strftime

我有一个 UTC 时间,我想要从纪元开始的秒数。

我正在使用 strftime 将其转换为秒数。 以 2012 年 4 月 1 日为例。

>>>datetime.datetime(2012,04,01,0,0).strftime('%s')
'1333234800'

2012 年 4 月 1 日 UTC 从纪元开始是 1333238400 ,但上面的返回 1333234800 相差 1 小时。

所以看起来 strftime 正在考虑我的系统时间并在某处应用时区转换。 我认为 datetime 纯粹是幼稚的?

我怎样才能解决这个问题? 如果可能避免导入其他库,除非是标准的。 (我有便携性问题)。

如果您想将 python 日期时间转换为自纪元以来的秒数,您可以明确地执行此操作:

>>> (datetime.datetime(2012,4,1,0,0) - datetime.datetime(1970,1,1)).total_seconds()
1333238400.0

在 Python 3.3+ 中,您可以使用timestamp()代替:

>>> datetime.datetime(2012,4,1,0,0).timestamp()
1333234800.0

为什么你不应该使用datetime.strftime('%s')

Python 实际上并不支持 %s 作为 strftime 的参数(如果您在http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior检查它不在列表中),唯一的它工作的原因是因为 Python 正在将信息传递给系统的 strftime,它使用您的本地时区。

>>> datetime.datetime(2012,04,01,0,0).strftime('%s')
'1333234800'

我对时区等有严重的问题。 Python 处理所有这些的方式碰巧很令人困惑(对我来说)。 使用日历模块似乎一切正常(请参阅链接1234 )。

>>> import datetime
>>> import calendar
>>> aprilFirst=datetime.datetime(2012, 04, 01, 0, 0)
>>> calendar.timegm(aprilFirst.timetuple())
1333238400
import time
from datetime import datetime
now = datetime.now()

time.mktime(now.timetuple())
import time
from datetime import datetime
now = datetime.now()

# same as above except keeps microseconds
time.mktime(now.timetuple()) + now.microsecond * 1e-6

(对不起,它不会让我对现有答案发表评论)

如果您只需要 unix /epoch 时间的时间戳,则这一行有效:

created_timestamp = int((datetime.datetime.now() - datetime.datetime(1970,1,1)).total_seconds())
>>> created_timestamp
1522942073L

并且仅依赖于 python2 和 python3 中的datetime工作

对于明确的独立于时区的解决方案,请使用 pytz 库。

import datetime
import pytz

pytz.utc.localize(datetime.datetime(2012,4,1,0,0), is_dst=False).timestamp()

输出(浮点数):1333238400.0

这适用于 Python 2 和 3:

>>> import time
>>> import calendar
>>> calendar.timegm(time.gmtime())
1504917998

只需遵循官方文档... https://docs.python.org/2/library/time.html#module-time

在 Python 3.7 中

以 date.isoformat() 和 datetime.isoformat() 发出的格式之一返回与 date_string 对应的日期时间。 具体来说,此函数支持格式为 YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]] 的字符串, 其中 * 可以匹配任何单个字符。

https://docs.python.org/3/library/datetime.html#datetime.datetime.fromisoformat

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM