我以字符串形式获取日期,然后我将其解析为datetime对象。 有没有办法检查对象的日期格式是什么?
让我们说这是我创造的对象:
modified_date = parser.parse("2015-09-01T12:34:15.601+03:00")
我如何打印或获取此对象的确切日期格式,我需要这样才能验证它的格式是否正确,以便我能够做出今天的差异和#39;日期和给定日期。
答案 0 :(得分:4)
我查看了源代码,不幸的是,python dateutil没有公开格式。事实上它根本不会产生对格式的猜测,它只是继续并解析 - 代码就像big nested spaghetti of conditionals。
你可以查看dateinfer看起来像你正在搜索的内容,但是这些是不相关的库,因此根本无法保证python-util将使用相同的格式进行解析dateinfer建议。
>>> from dateinfer import infer
>>> s = "2015-09-01T12:34:15.601+03:00"
>>> infer([s])
'%Y-%d-%mT%I:%M:%S.601+%m:%d'
看看.601
。关闭但不是雪茄。我认为它可能也混淆了一个月和一天。您可以通过为其提供多个日期字符串来获得更好的结果。
答案 1 :(得分:3)
我需要这个来验证它的格式是否正确
如果您知道预期的时间格式(或一组有效的时间格式),那么您可以使用它解析输入:如果成功则时间格式有效(the usual EAFP approach in Python):
for date_format in valid_date_formats:
try:
return datetime.strptime(date_string, date_format), date_format
except ValueError: # wrong date format
pass # try the next format
raise ValueError("{date_string} is not in the correct format. "
"valid formats: {valid_date_formats}".format(**vars()))
这里是complete code example (in Russian -- ignore the text, look at the code)。
如果有许多有效的日期格式,那么为了提高时间性能,您可能希望将它们合并为一个正则表达式或convert the regex to a deterministic or non-deterministic finite-state automaton (DFA or NFA)。
通常,如果您需要从更大的文本中提取日期,这些文本太多,无法手动创建解析规则;考虑机器学习解决方案,例如NER system,例如webstruct
(用于html输入)。