Python - 获取日期格式

时间:2015-12-03 18:27:10

标签: python datetime-format python-dateutil

我以字符串形式获取日期,然后我将其解析为datetime对象。 有没有办法检查对象的日期格式是什么?

让我们说这是我创造的对象:

modified_date = parser.parse("2015-09-01T12:34:15.601+03:00")

我如何打印或获取此对象的确切日期格式,我需要这样才能验证它的格式是否正确,以便我能够做出今天的差异和#39;日期和给定日期。

2 个答案:

答案 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输入)。