使用strftime将python datetime转换为纪元

我有一个UTC时间,我想从这个时代开始秒数。

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

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

从时代2012年4月1日UTC是1333238400,但是这返回1333234800,这是不同的1小时。

所以看起来strftime正在考虑我的系统时间,并在某处应用时区转换。 我以为date时间纯粹是天真的?

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

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

如果你想把Python的date时间转换成自从时代以来的秒数,你应该明确地做到这一点:

 >>> datetime.datetime(2012,04,01,0,0).strftime('%s') '1333234800' >>> (datetime.datetime(2012,04,01,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 

我有时区等严重问题。 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 

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

这在Python 2和3中工作:

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

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