使用strftim将python datetime转换为epoch

2024-04-26 09:40:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

2012年4月1日从epoch开始的UTC是133324800,但上面返回的133324800与1小时不同。

所以看起来strftime正在考虑我的系统时间,并在某个地方应用时区偏移。我以为约会时间纯属天真?

我怎样才能避开那件事?如果可能,避免导入其他库,除非是标准库。(我担心可移植性)。


Tags: 标准datetime系统地方时间约会utc小时
3条回答

如果要将python datetime转换为epoch之后的秒数,可以显式地执行此操作:

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

在Python 3.3+中,可以使用^{}代替:

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

相关问题 更多 >