Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将时间戳转换为unix日期python_Python_Python 2.7_Datetime - Fatal编程技术网

将时间戳转换为unix日期python

将时间戳转换为unix日期python,python,python-2.7,datetime,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' 为我抛出错误,可能是因为使用

以下是时间戳的外观-

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上

请提供想法?

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

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
注意,这是Python2的工作版本,您还可以检查其他版本的解决方案

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

另附

strtime文档似乎支持时区,但实际上尚未实现。尝试:

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

您将看到它不受支持。您还可以通过搜索有关strtime()的更多信息来验证它。

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

因为时间戳的来源是
django.DateTimeField
可能吗

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

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

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

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

对于Python 2.7,请使用:

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

您显示的日期字符串不会被标准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()
请注意,arrow应该仍然适用于PY3,并且通常是一个更好的解决方案-您不想陷入python的日期时间解析战争。它会赢。

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

有两个部分:

  • 要将
    “2015-07-17 06:01:51.066141+00:00”
    转换为表示UTC时间的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时间),请参阅:



我给出了try-get-ValueError:time数据'2015-07-17 06:01:51.066141+00:00'与格式'%Y-%m-%d%H:%m:%S.%f+%Z'Python不支持
。strftime(“%S”)
,请参阅或者是的,
strptime
似乎不支持“+hh:mm”样式的UTC偏移量。我认为你应该考虑一下时间戳字符串的来源:它是从哪里来的?你能让它有其他格式吗?您保证使用这种格式吗?datetime可能重复错误,它支持时区,如
+0530
(中间没有:冒号),请使用
%z
。python不支持
%s
符号,这是基础c的
strftime()
函数的产物。这只在linux中有效。我不建议人们使用
.strftime(“%s”)
@AnandSKumar它以这种方式支持时区,但是
strftime
似乎不接受
%z
。是的,就像我在中间没有冒号一样,抛出同样的错误--ValueError:‘Z’是一个坏的指令,格式为%y%-m%%d%h:%m:%s%f%Z'有趣!我正在使用python 3.4,工作正常。你是对的,我验证了它不适用于2.7。这个解决方案依赖于更新版本的python,但是我认为这是朝着正确方向迈出的一步。当使用
datetime
解析时间戳时,您必须对时区偏移进行类似的解决方法。例如,您可以使用
datetime
分别解析UTC偏移量和时间戳的其余部分,然后合并结果。似乎具有您不必解析自己所需的功能。注意:
arrow.timestamp
会降低几分之一秒(它返回一个整数时间戳)。创建datetime对象时,我仍然面临问题-datetime.datetime.strTime(“2015-07-17 06:01:01:51.066141+00:00”,%Y-%m-%d%H:%m:%S.%f%z”)ValueError:“z”是一个错误的指令,格式为“%Y-%m-%d%H:%m:%S.%f%z'@user2119554是的,我知道,您必须使用三种方法之一来解析我提到的时间戳(直接使用
datetime
模块将无法工作)。时间戳是从哪里来的?它是使用模型创建的。DateTimeField@user2119554你是说django吗?您确定时间戳将以这种方式格式化吗?也许
arrow
(GG_Python的回答中提到的可能会帮助您解析时间戳?yeh django,我已经完成了。看起来不错,但是我不确定哪种方法可以帮助我转换到unix日期。-t=arrow.get('2015-07-17 06:01:51.066141+00:00'))注意:
%z
即使在Python 3.2+中也不理解utc偏移量中的冒号,请参阅
from datetime import datetime

utc_time = datetime.strptime(time_string, "%Y-%m-%d %H:%M:%S.%f+00:00")
from datetime import datetime

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