【问题标题】:Combining a parsed time with today's date in Python在 Python 中将解析的时间与今天的日期相结合
【发布时间】:2014-11-17 18:21:36
【问题描述】:

这应该很容易,但是 Python 过于复杂的日期时间混乱使简单的事情变得复杂......

所以我有一个 HH:MM 格式的时间字符串(例如'09:30'),我想将它转换为带有今天日期的日期时间。不幸的是,默认日期是 1900 年 1 月 1 日:

>>> datetime.datetime.strptime(time_str, "%H:%M")
datetime.datetime(1900, 1, 1, 9, 50)

datetime.combine 看起来就是为此而生,但如果我能弄清楚如何解析时间以便它接受它,我会感到很痛苦:

now = datetime.datetime.now()
>>> datetime.datetime.combine(now, time.strptime('09:30', '%H:%M'))
TypeError: combine() argument 2 must be datetime.time, not time.struct_time

>>> datetime.datetime.combine(now, datetime.datetime.strptime('09:30', '%H:%M'))
TypeError: combine() argument 2 must be datetime.time, not datetime.datetime

>>> datetime.datetime.combine(now, datetime.time.strptime('09:30', '%H:%M'))
AttributeError: type object 'datetime.time' has no attribute 'strptime'

这个怪物有效......

>>> datetime.datetime.combine(now,
    datetime.time(*(time.strptime('09:30', '%H:%M')[3:6])))
datetime.datetime(2014, 9, 23, 9, 30)

...但是必须有更好的方法来做到这一点...!?

【问题讨论】:

    标签: python datetime time strptime


    【解决方案1】:

    function signature 说:

    datetime.combine(date, time)
    

    所以将datetime.date 对象作为第一个参数,将datetime.time 对象作为第二个参数:

    >>> import datetime as dt
    >>> today = dt.date.today()
    >>> time = dt.datetime.strptime('09:30', '%H:%M').time()
    >>> dt.datetime.combine(today, time)
    datetime.datetime(2014, 9, 23, 9, 30)
    

    【讨论】:

      【解决方案2】:

      pip install python-dateutil

      >>> from dateutil import parser as dt_parser
      >>> dt_parser.parse('07:20')
      datetime.datetime(2016, 11, 25, 7, 20)
      

      https://dateutil.readthedocs.io/en/stable/parser.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多