将时间戳转换为unix日期python



时间戳如下-

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: my virtualenv is on python 2.7

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

, Python 2.7 使用箭头:

import arrow    
date_str = "2015-07-17 06:01:51.066141+00:00"
unix_time = arrow.get(date_str).timestamp

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

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

import datetime
date_str = "2015-07-17 06:01:51.066141+00:00"
date_str_no_colon = date_str[:-3]+date_str[-2:] # remove last colon
dt_obj = datetime.datetime.strptime(date_str_no_colon, "%Y-%m-%d %H:%M:%S.%f%z")
unix_time = dt_obj.timestamp()

请注意,箭头应该仍然可以与PY3一起工作,并且通常是一个更好的解决方案-您不想与python进行日期时间解析战争。它赢。

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

作为时间戳的来源是django.DateTimeField也许这个问题可以帮助?

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

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

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

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

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

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的工作版本,你也可以在这里查看其他版本的解决方案

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

注::

strptime文档似乎支持时区,但实际上还没有实现。试一试:

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

,您将看到它不被支持。您还可以通过搜索更多关于strptime()

的信息来验证它

分为两部分:

  • "2015-07-17 06:01:51.066141+00:00"转换为代表UTC时间的datetime对象,请参见使用strptime将带偏移的时间戳转换为datetime对象。或者如果你知道utc偏移量总是+0000:

    from datetime import datetime
    utc_time = datetime.strptime(time_string, "%Y-%m-%d %H:%M:%S.%f+00:00")
    
  • 将UTC时间转换为POSIX时间戳(unix时间),请参见转换日期时间。Python中的date到UTC时间戳:

    from datetime import datetime
    timestamp = (utc_time - datetime(1970, 1, 1)).total_seconds()
    

相关内容

  • 没有找到相关文章