将时间戳转换为unix date python

时间:2015-07-21 06:36:39

标签: python python-2.7 datetime

以下是时间戳的外观 -

2015-07-17 06:01:51.066141+00:00

我正在四处寻找将其转换为unix日期时间。

datetime.strptime("2015-07-17 06:01:51.066141+00:00", "%Y-%m-%d %H:%M:%S.%f%z").strftime("%s")

ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M:%S.%f%z'

为我抛出错误,可能是因为使用了错误的格式。

PS:我的virtualenv在python 2.7上

想法吗?

5 个答案:

答案 0 :(得分:2)

Python 2.7 使用arrow

blocks

PY3 (在3.4上验证),仅使用标准库

您显示的日期字符串不会被标准python日期时间库解析,因为它在时区中有一个冒号(请参阅here)。冒号可以很容易地删除,因为它总是处于相同的位置(或使用rfind从右边开始查找索引)。最简单的解决方案是:

for

请注意,箭头仍应与PY3一起使用,并且通常是更好的解决方案 - 您不想使用python进入日期时间解析战争。它获胜。

答案 1 :(得分:2)

python 2.7 strptime()不支持z指令,你可以使用python 3.2+或其他第三方库,如dateutil。

答案 2 :(得分:1)

strptime()不支持时区。 因此,您可以通过以下方式使转换忽略时区:

datetime.strptime("2015-07-17 06:01:51.066141", "%Y-%m-%d %I:%M:%S.%f").strftime("%s")
'1437102111'

或者为了避免使用%s,如下面提交的那样:

from datetime import datetime
(datetime.strptime("2015-07-17 06:01:51.066141", "%Y-%m-%d %I:%M:%S.%f") - datetime(1970, 1, 1)).total_seconds()
1437112911.066141

请注意,这是适用于Python 2的工作版本,您还可以检查其他版本的解决方案here

否则,您将不得不使用支持时区的其他库(django.utils或email.utils),或者自己实现时区解析。

P.S。

strptime docs似乎支持时区,但实际上它尚未实现。试试:

datetime.strptime("2015-07-17 06:01:51.066141+00:00", "%Y-%m-%d %I:%M:%S.%f%z").strftime("%s")

你会发现它不受支持。您还可以通过搜索有关strptime()

的更多信息来验证它

答案 3 :(得分:1)

解析日期的方法不对。您需要手动解析它,找到另一个库(例如,将直接解析您的字符串的dateutil.parser.parse方法而不提供格式字符串)支持该格式或以其他格式制作时间戳。即使使用较新版本的python,%z指令也不接受+/-HH:MM格式的TZ偏移(带冒号)。

由于时间戳的来源是django.DateTimeField,可能是this question can help

为了转换为unix时间戳,你似乎必须做一些工作,因为似乎没有直接的方法:

(t - datetime.utcfromtimestamp(0)).total_seconds()

其中tdatetime(假设它是UTC并且没有tzinfo)您要转换为POSIX时间戳。如果假设不正确,您需要将tzinfo放入您减去的零时间戳中,如下所示假设不成立。

如果您想使用dateutil.parser,完整的解决方案将是:

(dateutil.parser.parse(timestamp) - datetime.utcfromtimestamp(0).replace(tzinfo=utc()).total_seconds()

答案 4 :(得分:0)

分为两部分: