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

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

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

2012年4月1日的世界时是1333238400,但上面返回的是1333234800,相差1小时。

因此,看起来strftime正在考虑我的系统时间,并在某个地方应用时区移位。我还以为约会时间太天真了?

我怎么才能避开这个问题呢?如果可能,避免导入其他库,除非标准。(我担心携带不便)。


当前回答

Python 3.7

返回一种格式的date_string对应的datetime 由date.isoformat()和datetime.isoformat()触发。具体地说, 此函数支持以下格式的字符串: YYYY-MM-DD (* HH: MM [: SS (.fff [fff]]]] (+ HH: MM: SS(。Ffffff]]]],其中* . 可以匹配任何单个字符。

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

其他回答

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

time.mktime(now.timetuple())

Python 3.7

返回一种格式的date_string对应的datetime 由date.isoformat()和datetime.isoformat()触发。具体地说, 此函数支持以下格式的字符串: YYYY-MM-DD (* HH: MM [: SS (.fff [fff]]]] (+ HH: MM: SS(。Ffffff]]]],其中* . 可以匹配任何单个字符。

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

对于显式的与时区无关的解决方案,请使用pytz库。

import datetime
import pytz

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

输出(浮点):1333238400.0

如果你只需要一个Unix /epoch的时间戳,这一行可以工作:

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

并且只依赖于datetime 适用于python2和python3

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

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

(对不起,它不让我评论现有的答案)