日期时间Unix时间戳包含毫秒

Chr*_*ten 5 python unix datetime

我有一个包含毫秒的unix时间戳列表 - 它们长13位.当我通过datetime.fromtimestamp(unix_timestamp)它运行时间戳时返回一个ValueError: Year Out of Range.当我从时间戳中删除最后三位数并通过相同的格式转换器运行时,它的工作完美.是否可以通过datetime的fromtimestamp方法运行包含毫秒的Unix时间戳而不会引发ValueError?我正在查看文档,并没有说明指定毫秒.

任何帮助都是极好的!

Jor*_*dan 9

从文档中,您可以看到Python中的时间戳应该以秒为单位计算,而不是毫秒:http://docs.python.org/2/library/time.html#time.time

你可能已经过去了.

尽管如此,切掉时间戳的最后3位数字应该相当容易:

datetime.fromtimestamp(str(unix_timestamp)[0:-3])
Run Code Online (Sandbox Code Playgroud)

您可能还希望进行一些字符串长度检查以验证它们是13位数而不是仅仅10位:

if len(unix_timestamp) == 13:
    unix_timestamp = float(str(unix_timestamp)[0:-3])

datetime.fromtimestamp(unix_timestamp)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,在某些系统上,时间戳必须在1970年至2038年之间.这也可能导致a 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)
Run Code Online (Sandbox Code Playgroud)