我正在尝试将ISO转换为datetime使用以下代码:
dt = datetime.datetime.strptime("2013-07-23T15:10:59.342107+01:00",
"%Y-%m-%dT%H:%M:%S.%f%z")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S.%f%z'
Run Code Online (Sandbox Code Playgroud)
将格式上面的ISO字符串转换为对象的最佳方法是什么datetime?我使用的是Python 2.7.6版.
我正在尝试从电子邮件中检索日期.起初它很容易:
message = email.parser.Parser().parse(file)
date = message['Date']
print date
Run Code Online (Sandbox Code Playgroud)
我收到:
'Mon, 16 Nov 2009 13:32:02 +0100'
Run Code Online (Sandbox Code Playgroud)
但我需要一个不错的日期时间对象,所以我使用:
datetime.strptime('Mon, 16 Nov 2009 13:32:02 +0100', '%a, %d %b %Y %H:%M:%S %Z')
Run Code Online (Sandbox Code Playgroud)
提升了ValueError, since %Z isn't format for +0100.但我在文档中找不到适当的时区格式,只有这个%Z区域.有人可以帮助我吗?
继我之前的问题,Python的时间老化之后,我现在遇到了关于时区的问题,结果发现它并不总是"+0200".因此当strptime尝试解析它时,它会引发异常.
我想过用[:-6]或者其他什么来切断+0200,但有一种真正的方法可以用strptime做到这一点吗?
如果重要的话,我正在使用Python 2.5.2.
>>> from datetime import datetime
>>> fmt = "%a, %d %b %Y %H:%M:%S +0200"
>>> datetime.strptime("Tue, 22 Jul 2008 08:17:41 +0200", fmt)
datetime.datetime(2008, 7, 22, 8, 17, 41)
>>> datetime.strptime("Tue, 22 Jul 2008 08:17:41 +0300", fmt)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/_strptime.py", line 330, in strptime
(data_string, format))
ValueError: time data did not match format: data=Tue, 22 Jul 2008 08:17:41 +0300 fmt=%a, %d %b %Y %H:%M:%S +0200
Run Code Online (Sandbox Code Playgroud) 鉴于以下Python
import datetime
>>> a
'2011-05-04 16:20:09 -0700'
>>> datetime.datetime.strptime(a, "%Y-%m-%d %H:%M:%S %z")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/_strptime.py", line 317, in _strptime
(bad_directive, format))
ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M:%S %z'
>>>
Run Code Online (Sandbox Code Playgroud)
我真的不明白%z一个坏指令怎么样.
参考:http: //docs.python.org/library/datetime.html#strftime-strptime-behavior
这是来自hg,它说它是ISO8601格式.
我试图将日期字符串转换为datetime对象,如下所示:
dt = datetime.datetime.strptime('2011-07-15 13:00:00+00:00', '%Y-%m-%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
但是,我得到以下错误:
回溯(最近一次调用最后一次):文件"",第1行,文件"/usr/lib/python2.6/_strptime.py",第328行,在_strptime data_string [found.end():]中)ValueError:未转换数据仍为:+00:00
我想我的格式字符串有问题.如何解决?
谢谢
Mon Jul 09 09:20:28 +0000 2012
Run Code Online (Sandbox Code Playgroud)
如果我有一个像STRING那样的格式,我怎么能把它变成一个unix时间戳呢?
注意:我从Twitter的API获取此格式:
Dateutil是一个很好的工具,用于以字符串格式解析日期.例如
from dateutil.parser import parse
parse("Tue, 01 Oct 2013 14:26:00 -0300")
Run Code Online (Sandbox Code Playgroud)
回报
datetime.datetime(2013, 10, 1, 14, 26, tzinfo=tzoffset(None, -10800))
Run Code Online (Sandbox Code Playgroud)
然而,
parse("Ter, 01 Out 2013 14:26:00 -0300") # In portuguese
Run Code Online (Sandbox Code Playgroud)
产生此错误:
ValueError: unknown string format
Run Code Online (Sandbox Code Playgroud)
有谁知道如何使dateutil知道语言环境?
python localization date internationalization python-dateutil
我正在尝试解析这个日期时间字符串,但还没有成功,我怎么能得到它?
d = '2014-05-01 18:10:38-04:00'
datetime.datetime.strptime(d,'%Y-%m-%d %H:%M:%S-%Z')
ValueError: time data '2014-05-01 18:10:38-04:00' does not match format '%Y-%m-%d %H:%M:%S%Z'
Run Code Online (Sandbox Code Playgroud) 假设我有以下datetime对象:
>>> dt
datetime.datetime(2015, 5, 13, 18, 5, 55, 320000, tzinfo=datetime.timezone(datetime.timedelta(-1, 61200)))
Run Code Online (Sandbox Code Playgroud)
我可以用ISO 8601格式打印该对象,如下所示:
>>> dt.isoformat()
'2015-05-13T18:05:55.320000-07:00'
Run Code Online (Sandbox Code Playgroud)
在Python 3.4下,如果我删除时区中的冒号,我可以解析ISO 8601字符串的字符串:
>>> import re
>>> ts='2015-05-13T18:05:55.320-07:00'
>>> tf="%Y-%m-%dT%H:%M:%S.%f%z"
>>> tsm=re.sub(r'([+-]\d+):(\d+)$', r'\1\2', '2015-05-13T18:05:55.320-07:00')
>>> tsm
'2015-05-13T18:05:55.320-0700'
>>> datetime.datetime.strptime(tsm, tf)
datetime.datetime(2015, 5, 13, 18, 5, 55, 320000, tzinfo=datetime.timezone(datetime.timedelta(-1, 61200)))
Run Code Online (Sandbox Code Playgroud)
在Python 2.7下,情况更糟,因为它%z似乎没有记录的工作:
>>> tsm='2015-05-13T18:05:55.320-0700'
>>> tf="%Y-%m-%dT%H:%M:%S.%f%z"
>>> datetime.datetime.strptime(tsm, tf)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_strptime.py", line 317, in _strptime
(bad_directive, format)) …Run Code Online (Sandbox Code Playgroud) 我有一个带有时间戳的日志文件,例如“2012-05-12T13:04:35.347-07:00”。我想将每个时间戳转换为一个数字,以便根据时间按升序对它们进行排序。
我怎样才能在 Python 中做到这一点?在 Java 中,我发现我可以使用这种格式转换时间戳,SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")但对于 Python 我找不到任何东西。
我有字符串:
import datetime
time = "2016-02-01 19:14:54+02:00"
Run Code Online (Sandbox Code Playgroud)
并尝试将其转换为datetime obj:
result = datetime.datetime.strptime(time, "%Y-%m-%d %H:%M:%S%z")
Run Code Online (Sandbox Code Playgroud)
它抛出异常:
ValueError: time data '2016-02-01 19:14:54+02:00' does not match format '%Y-%m-%d %H:%M:%S%z'
Run Code Online (Sandbox Code Playgroud)
你能帮我解决一下这里有什么问题吗?
我试图以下面的格式解析日志文件中的字符串: 2011-06-27 10:29:56+0200
如果我使用datetime.datetime.strptime('%Y-%m-%d %H:%M:%S%z')我会ValueError("'z' is a bad directive in format '%Y-%m-%d %H:%M:%S%z'")被抛出
如何以这种格式解析日期?
python ×12
datetime ×7
date ×3
iso ×2
python-2.7 ×2
python-3.x ×2
timezone ×2
format ×1
localization ×1
rfc3339 ×1
rfc5322 ×1
time ×1
timestamp ×1