以下是时间戳的外观 -
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上
想法吗?答案 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()
其中t
是datetime
(假设它是UTC并且没有tzinfo
)您要转换为POSIX时间戳。如果假设不正确,您需要将tzinfo
放入您减去的零时间戳中,如下所示假设不成立。
如果您想使用dateutil.parser
,完整的解决方案将是:
(dateutil.parser.parse(timestamp) - datetime.utcfromtimestamp(0).replace(tzinfo=utc()).total_seconds()
答案 4 :(得分:0)
分为两部分:
将"2015-07-17 06:01:51.066141+00:00"
转换为表示UTC时间的日期时间对象,请参阅Convert timestamps with offset to datetime obj using strptime。或者如果您知道utc偏移始终为+0000
:
from datetime import datetime
utc_time = datetime.strptime(time_string, "%Y-%m-%d %H:%M:%S.%f+00:00")
将UTC时间转换为POSIX时间戳(unix时间),请参阅Converting datetime.date to UTC timestamp in Python:
from datetime import datetime
timestamp = (utc_time - datetime(1970, 1, 1)).total_seconds()