相关疑难解决方法(0)

如何解析ISO 8601格式的日期?

我需要将RFC 3339字符串解析"2008-09-03T20:56:35.450686Z"为Python的datetime类型.

strptime在Python标准库中找到了,但它不是很方便.

做这个的最好方式是什么?

python datetime iso8601 rfc3339 datetime-parsing

583
推荐指数
21
解决办法
36万
查看次数

如何将Python的.isoformat()字符串转换回datetime对象

因此在Python 3中,您可以使用.isoformat()生成ISO 8601日期,但是您无法将isoformat()创建的字符串转换回datetime对象,因为Python自己的日期时间指令不能正确匹配.也就是说,%z = 0500而不是05:00(由.isoformat()生成).

例如:

>>> strDate = d.isoformat()
>>> strDate
'2015-02-04T20:55:08.914461+00:00'

>>> objDate = datetime.strptime(strDate,"%Y-%m-%dT%H:%M:%S.%f%z")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python34\Lib\_strptime.py", line 500, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "C:\Python34\Lib\_strptime.py", line 337, in _strptime
    (data_string, format))
ValueError: time data '2015-02-04T20:55:08.914461+00:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
Run Code Online (Sandbox Code Playgroud)

来自Python的strptime文档:(https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior)

%z UTC格式+ HHMM或-HHMM中的UTC偏移量(如果对象是天真的,则为空字符串).(空),+ 0000,-0400,+ 1030

因此,简而言之,Python甚至不遵守自己的字符串格式化指令.

我知道日期时间在Python中已经很糟糕了,但这真的超出了不合理的范围,变成了愚蠢的土地.

告诉我这不是真的.

python datetime iso8601 rfc3339

75
推荐指数
2
解决办法
6万
查看次数

如何用Python中的-0400时区字符串解析日期?

我有一个'2009/05/13 19:19:30 -0400'形式的日期字符串.对于尾随时区规范,似乎以前版本的Python可能支持strptime中的%z格式标记,但2.6.x似乎已经删除了它.

将此字符串解析为日期时间对象的正确方法是什么?

python timezone datetime

74
推荐指数
5
解决办法
6万
查看次数

ISO到datetime对象:'z'是一个错误的指令

我正在尝试将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版.

python datetime iso rfc3339

38
推荐指数
2
解决办法
4万
查看次数

通过电子邮件解析带有时区的日期?

我正在尝试从电子邮件中检索日期.起初它很容易:

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 format timezone datetime rfc5322

31
推荐指数
4
解决办法
2万
查看次数

用冒号解析时区

有没有办法用strptime解析"+00:00"格式的时区?例如:

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime
>>> datetime.strptime("12:34:56+0000", "%X%z")
datetime.datetime(1900, 1, 1, 12, 34, 56, tzinfo=datetime.timezone.utc)
>>> datetime.strptime("12:34:56+00:00", "%X%z")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python34\lib\_strptime.py", line 500, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "C:\Python34\lib\_strptime.py", line 337, in _strptime
    (data_string, format))
ValueError: time data '12:34:56+00:00' does not match …
Run Code Online (Sandbox Code Playgroud)

python string datetime strptime

23
推荐指数
3
解决办法
6409
查看次数

将RFC 3339时间转换为标准Python时间戳

有没有简单的方法将RFC 3339时间转换为常规Python时间戳?

我有一个正在读取ATOM源的脚本,我希望能够将ATOM源中项目的时间戳与文件的修改时间进行比较.

我从ATOM规范中注意到,ATOM日期包括时区偏移量(Z<a number>),但在我的情况下,之后没有任何内容,Z所以我猜我们可以假设GMT.

我想我可以用某种类型的正则表来解析时间,但我希望Python有一种内置的方式来做我以前无法找到的方法.

python datetime rfc3339

18
推荐指数
10
解决办法
3万
查看次数

使用strptime获取datetime对象时的ValueError

我试图将日期字符串转换为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

我想我的格式字符串有问题.如何解决?

谢谢

python datetime

8
推荐指数
2
解决办法
3万
查看次数

Python datetime.strptime,ISO 8601

假设我有以下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)

python datetime iso python-2.7 python-3.x

6
推荐指数
0
解决办法
79
查看次数

将气流宏“ts”转换为日期时间对象

我在将气流宏引用“ts”转换为日期时间对象时遇到问题。问题出在字符串末尾的tz上。

from datetime import datetime
timetoday = kwargs['ts']
t = datetime.strptime(timetoday, '%Y-%m-%dT%H:%M:%S%z')
Run Code Online (Sandbox Code Playgroud)

代码没有成功执行,而是抛出错误消息:

time data '2019-08-24T00:00:00+00:00' does not match format '%Y-%m-%dT%H:%M:%S%z'
Run Code Online (Sandbox Code Playgroud)

如果我使用格式略有不同的相同代码,并尝试使用“ds”宏,并且我设法将字符串转换为日期时间对象。

time data '2019-08-24T00:00:00+00:00' does not match format '%Y-%m-%dT%H:%M:%S%z'
Run Code Online (Sandbox Code Playgroud)

更新:阅读http://strftime.org/中的注释并了解其%z格式为+HHMM-HHMM的 UTC 偏移量(如果对象是幼稚的,则为空字符串)。':'这让我想知道之间的附加+00:00(返回的字符串 ofkwargs['ts']是否是错误的根本原因。但是,我仍然不确定如何正确解析它,因为strptime.

因此,我将宏更改为kwargs['ts_nodash']不返回时区,并暂时继续我的代码。如果有人知道如何做到这一点,我仍然有兴趣了解如何正确完成!谢谢!

from datetime import datetime
timetoday = kwargs['ds']
t = datetime.strptime(timetoday, '%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)

python datetime-format airflow

5
推荐指数
1
解决办法
2万
查看次数