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

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

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

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

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

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


当前回答

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

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

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

其他回答

这适用于Python 2和3:

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

只是按照官方文件… https://docs.python.org/2/library/time.html#module-time

我在时区等方面有严重的问题。Python处理所有这些的方式(对我来说)非常令人困惑。使用日历模块似乎工作得很好(参见链接1、2、3和4)。

>>> 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

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