我有一段时间在UTC,从那里我想要自纪元以来的秒数 .
我使用strftime将其转换为秒数 . 以2012年4月1日为例 .
>>>datetime.datetime(2012,04,01,0,0).strftime('%s')
'1333234800'
2012年4月1日UTC的纪元是1333238400但是这个上面返回1333234800,相差1小时 .
所以看起来strftime正在考虑我的系统时间并在某个地方应用时区转换 . 我以为datetime纯粹是天真的?
我怎么能绕过那个?如果可能的话,避免导入其他库,除非标准 . (我有可移植性问题) .
9 回答
如果你想将python日期时间转换为epoch以来的秒数,你可以明确地做到:
在Python 3.3中,您可以使用timestamp()代替:
Why you should not use datetime.strftime('%s')
Python实际上不支持%s作为strftime的参数(如果你在http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior检查它's not in the list), the only reason it'的工作是因为Python将信息传递给你的系统的strftime,它使用你的本地时区 .
我和Timezones等有严重的问题 . Python处理所有碰巧相当令人困惑的方式(对我而言) . 使用日历模块似乎工作正常(请参阅链接1,2,3和4) .
(对不起,它不会让我对现有答案发表评论)
这适用于Python 2和3:
刚刚关注官方文档... https://docs.python.org/2/library/time.html#module-time
如果你只需要unix / epoch时间的时间戳,这一行就可以了:
并且仅依赖于
datetime
在python2和python3中工作对于明确的与时区无关的解决方案,请使用pytz库 .
输出(浮点):1333238400.0
介绍pendulum,这是一个第三方
datetime
库,它使日期工作更加人性化 .要检索特定日期的时间戳,请使用
默认时区是
UTC
,但您可以使用tz
参数更改此值:要检索此确切时刻的时间戳,请使用
pendulum.now()
:请注意,
now()
是时区感知的 .在Python 3.7中
https://docs.python.org/3/library/datetime.html#datetime.datetime.fromisoformat