如何区分 dateutil 解析的日期和所有时间值都为 0 的日期时间

How to differentiate between a dateutil parsed date and a datetime with 0 for all time values

据我所知,一旦通过日期工具。我真的很想知道独立日期和时间戳为零的日期之间的区别。

import dateutil.parser
import datetime

date_str = '2020-10-07'
time_str = '2020-10-07T00:00:00'

s = dateutil.parser.parse(date_str)
e = dateutil.parser.parse(time_str)

最终目标是当它是独立日期时将时间设置为一天的开始和一天的结束,但当包含时间时将日期单独保留。接近这样的事情,但它仍然无法与这种情况区分开来。如果您知道对此有任何好的解决方案,那将非常有帮助。

if s == e and s.time() == datetime.time.min:
    e = datetime.datetime.combine(e, datetime.time.max)

Post 有点用,但它已经过时了,我什至不确定它是否适用于我的用例。 Finding if a python datetime has no time information

这是一个函数,它使用简单的 try/except 来测试输入是否可以解析为日期(即具有 没有 时间信息)或日期时间对象 (即 时间信息)。如果输入格式不同于 ISO 格式,您还可以实现特定的 strptime directives.

from datetime import date, time, datetime

def hasTime(s):
    """
    Parameters
    ----------
    s : string
        ISO 8601 formatted date / datetime string.

    Returns
    -------
    tuple, (bool, datetime.datetime).
        boolean will be True if input specifies a time, otherwise False.
    """
    try:
        return False, datetime.combine(date.fromisoformat(t), time.min)
    except ValueError:
        return True, datetime.fromisoformat(t)
        # do nothing else here; will raise an error if input can't be parsed

for t in ('2020-10-07', '2020-10-07T00:00:00', 'not-a-date'):
    print(t, hasTime(t))
    
# output:
# >>> 2020-10-07 (False, datetime.datetime(2020, 10, 7, 0, 0))
# >>> 2020-10-07T00:00:00 (True, datetime.datetime(2020, 10, 7, 0, 0))    
# >>> ValueError: Invalid isoformat string: 'not-a-date'