【问题标题】:Customizing time of the datetime object in python在python中自定义datetime对象的时间
【发布时间】:2016-04-22 13:02:32
【问题描述】:

出于计费目的,我有代码可以根据需要生成必要的数据。

但我目前面临一个与时间间隔有关的问题。我想通过添加默认时间值来解决这个问题。

确切地说,考虑以下日期时间对象值。

2016-03-22 05:36:07.703078
2016-04-21 05:36:07.703078

一个是开始日期的值,另一个是结束日期的值。

现在我需要将开始日期设置为“2016-03-22 00:00:00”,将结束日期设置为“2016-04-21 23:59:59”。

这是一个代码,我用于创建开始日期和结束日期。

    # begin date and end date set
    begin = date - dateutil.relativedelta.relativedelta(months=1)
    print(begin)
    print(type(begin))
    end = date - dateutil.relativedelta.relativedelta(days=1)
    print(end)

有人告诉我实现这一目标的方法。

【问题讨论】:

    标签: python date datetime time


    【解决方案1】:

    Python 的日期时间对象是不可变的,即date_obj.hour = 23 结果与
    AttributeError: attribute 'hour' of 'datetime.datetime' objects is not writable

    相反,我们需要创建一个新的日期时间对象。 将此作为指南:

    from datetime import datetime
    from dateutil import relativedelta
    
    orig_start = datetime.now()
    orig_end = datetime.now() + relativedelta.relativedelta(months=1)
    
    print(orig_start)
    print(orig_end)
    
    mod_start = datetime(year=orig_start.year,
                         month=orig_start.month,
                         day=orig_start.day,
                         hour=0, minute=0, second=0)
    
    mod_end = datetime(year=orig_end.year,
                       month=orig_end.month,
                       day=orig_end.day,
                       hour=23, minute=59, second=59)
    
    # or even better as suggested in the comments:
    mod_end = orig_end.replace(hour=23, minute=59, second=59, microsecond=0)
    
    print(mod_start)
    print(mod_end)
    

    输出:

    2016-04-22 16:11:08.171845
    2016-05-22 16:11:08.171845
    2016-04-22 00:00:00
    2016-05-22 23:59:59
    

    【讨论】:

    • 也许更简洁地使用日期时间对象的replace 方法,例如d.replace(hour=0, minute=0, second=0, microsecond=0)
    • @bgporter 同意,不知道那个。
    • @bgporter 你们可以看看这个吗:stackoverflow.com/questions/36763849/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    相关资源
    最近更新 更多