python - 将日期时间转换为时间戳并再次转换回来

标签 python datetime python-3.x

我在 Python 中遇到日期时间问题。我尝试将日期时间转换为时间戳,然后再返回,无论我如何尝试,最终结果都不一样。我总是以 datetime(2014, 1, 30, 23, 59, 40, 1998) 的日期时间结尾。

import datetime

a = datetime.datetime.timestamp(datetime.datetime(2014, 1, 30, 23, 59, 40, 1999))
b = datetime.datetime.fromtimestamp(a)

print(b)

最佳答案

这是一个已知的Python 3.4 issue :

>>> from datetime import datetime
>>> local = datetime(2014, 1, 30, 23, 59, 40, 1999)
>>> datetime.fromtimestamp(local.timestamp())
datetime.datetime(2014, 1, 30, 23, 59, 40, 1998)

注意:微秒没有了。 .timestamp() 已返回略小于 1999 微秒的结果:

>>> from decimal import Decimal
>>> local.timestamp()
1391126380.001999
>>> Decimal(local.timestamp())
Decimal('1391126380.0019989013671875')

The rounding is fixed in the next 3.4, 3.5, 3.6 releases :

>>> from datetime import datetime
>>> local = datetime(2014, 1, 30, 23, 59, 40, 1999)
>>> datetime.fromtimestamp(local.timestamp())
datetime.datetime(2014, 1, 30, 23, 59, 40, 1999)

要解决此问题,您可以使用显式公式:

>>> from datetime import datetime, timedelta
>>> local = datetime(2014, 1, 30, 23, 59, 40, 1999)
>>> datetime.utcfromtimestamp(local.timestamp())
datetime.datetime(2014, 1, 30, 23, 59, 40, 1998) # UTC time
>>> datetime(1970, 1, 1) + timedelta(seconds=local.timestamp())
datetime.datetime(2014, 1, 30, 23, 59, 40, 1999) # UTC time

注意:所有例子中输入的都是本地时间,最后一个结果是UTC时间。

关于python - 将日期时间转换为时间戳并再次转换回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32767394/

相关文章:

java - 使用 Java 8 日期时间 API 时如何将 AM/PM 符号更改为我自己的字母表

oracle - 在 sqlplus/Oracle 中将纪元转换为日期

python-3.x - 如何通过搜索列表中给出的关键字值在Python pandas数据框中添加新列?

python-3.x - 导入 Pandas 为 pd ImportError : No module named pandas

python - 如何从名为section的标签中提取数据

python - 设置 SQLAlchemy 自动增量起始值

python - 查找列表列表的最长公共(public)前缀的 Pythonic 方法是什么?

python - Python判断一个值是否为整数

.net - 如何更改 DateTime 变量的时间?

python-3.x - Tensorflow:读取可变长度数据,通过数据集(tfrecord)