我有一个 unix 时间戳列表,它们都包含毫秒——它们有 13 位长。当我通过 datetime.fromtimestamp(unix_timestamp)
运行时间戳时,它返回一个 ValueError: Year Out of Range
。当我从时间戳中删除最后三位数字并通过相同的格式转换器运行它时,它工作得很好。是否可以通过 datetime 的 fromtimestamp 方法运行包含毫秒的 Unix 时间戳而不引发 ValueError?我正在查看文档,但它没有说明任何关于指定毫秒的内容。
任何帮助都会很棒!
最佳答案
从文档中可以看出,Python 中的时间戳应该以秒为单位计算,而不是毫秒:http://docs.python.org/2/library/time.html#time.time
您可能已经了解过了。
虽然切掉时间戳的最后 3 位数字应该相当容易:
datetime.fromtimestamp(str(unix_timestamp)[0:-3])
您可能还希望进行一些字符串长度检查,以验证它们的长度是 13 位而不是 10 位:
if len(unix_timestamp) == 13:
unix_timestamp = float(str(unix_timestamp)[0:-3])
datetime.fromtimestamp(unix_timestamp)
顺便说一下,在某些系统上,时间戳必须在 1970 - 2038 之间。这也可能导致 ValueError
。
如果你想保留毫秒,你可以像这样存储它们:
milliseconds = 0
if len(unix_timestamp) == 13:
milliseconds = int(unix_timestamp[-3:])
unix_timestamp = float(unix_timestamp[0:-3])
the_date = datetime.fromtimestamp(unix_timestamp)
the_date += timedelta(milliseconds=milliseconds)
关于python - Datetime Unix 时间戳包含毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18724037/