使用 strftime 将 python 日期时间转换为纪元

新手上路,请多包涵

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

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

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

2012 年 4 月 1 日 UTC 从纪元开始是 1333238400 ,但上面的返回 1333234800 相差 1 小时。

所以看起来 strftime 正在考虑我的系统时间并在某处应用时区转换。我认为 datetime 纯粹是幼稚的?

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

原文由 Noel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 629
2 个回答

如果您想将 python 日期时间转换为自纪元以来的秒数,您可以显式执行此操作:

 >>> (datetime.datetime(2012,4,1,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


为什么你不应该使用 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'

原文由 jleahy 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在时区等方面遇到了严重的问题。 Python 处理所有碰巧的事情的方式(对我来说)非常令人困惑。使用日历模块似乎一切正常(请参阅链接 1234 )。

 >>> import datetime
>>> import calendar
>>> aprilFirst=datetime.datetime(2012, 04, 01, 0, 0)
>>> calendar.timegm(aprilFirst.timetuple())
1333238400

原文由 BorrajaX 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题