7

我喜欢用dateutil.parser.parse模块解析日期时间字符串。这很简单。但是我注意到在我的代码中我必须检查对象是否确实在 8601 中(并且知道)。

我的结构是:

if parse(datetime).tzinfo==None:
   #do something
else:
   #make it aware
   #do something

我想实现类似的目标:

if <IS-8601>:
   if parse(datetime).tzinfo==None:
      #do something
   else:
      #make it aware
      #do something
else:
   pass

如果我有一个 8601 之类的2014-02-28T22:30:00+0200parse 实用程序就可以完成它的工作。

但是,如果我有一个2014-03-20字符串解析将在对象上添加时间。这没有错,只是不需要:2014-03-20 00:00:00


那么如何检查一个对象是否在 8601 中呢?如果在 8601 中,它知道吗?我不介意更改为另一个日期时间库。

4

1 回答 1

1

您可以通过datetimeValueError模块解析它并在处理之前检查异常dateutil.parser.parse

>>> import datetime
>>> datetime.datetime.strptime("2014-03-20", '%Y-%m-%d')
datetime.datetime(2014, 3, 20, 0, 0)
>>> datetime.datetime.strptime("2014-02-28T22:30:00+0200", '%Y-%m-%d')
Traceback (most recent call last):
  File "<pyshell#134>", line 1, in <module>
    datetime.datetime.strptime("2014-02-28T22:30:00+0200", '%Y-%m-%d')
  File "C:\Python33\lib\_strptime.py", line 500, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "C:\Python33\lib\_strptime.py", line 340, in _strptime
    data_string[found.end():])
ValueError: unconverted data remains: T22:30:00+0200
于 2014-03-03T07:12:57.620 回答