【问题标题】:Adding a day in time.struct_time object在 time.struct_time 对象中添加一天
【发布时间】:2017-08-31 21:36:54
【问题描述】:

我正在使用 time.struct_time 设置日期和时间,我想使用 python 脚本添加到第二天。

我正在使用以下代码:

date_1 = "31/08/2017 10:30PM"
time_1 = time.strptime(date_1, '%d/%m/%Y %I:%M%p')

输出:

time.struct_time(tm_year=2017, tm_mon=8, tm_mday=31, tm_hour=22, tm_min=30, tm_sec=0, tm_wday=3, tm_yday=243, tm_isdst=-1)

现在我想在这个日期上增加 1 天。我使用了以下代码:

time.struct_time(tm_year=2017, tm_mon=9, tm_mday=1, tm_hour=22, tm_min=30, tm_sec=0, tm_wday=3, tm_yday=243, tm_isdst=-1)

我是这方面的新手,您能否给我看一个示例,如何使用我的代码添加到第二天的日期?

【问题讨论】:

    标签: python python-2.7 datetime


    【解决方案1】:

    老实说,我不确定是否有(干净的)方法。 struct_time 对象的数据存储为元组,因此它们是不可变的。这意味着它们不能真正被修改。

    我认为您应该改用 datetime 模块,如下所示:

    >>> from datetime import datetime
    >>> date_1 = "31/08/2017 10:30PM"
    >>> time_1 = datetime.strptime(date_1, "%d/%m/%Y %I:%M%p")
    >>> time_1
    datetime.datetime(2017, 8, 31, 22, 30)
    

    然后您可以像这样添加一个月:

    >>> from dateutil.relativedelta import relativedelta
    >>> time_1 + relativedelta(months=1)
    datetime.datetime(2017, 9, 30, 22, 30)
    

    如果要添加一天,则使用datetime.timedelta(),它处理月份的天数:

    from datetime import timedelta
    time_1 + timedelta(days=1)
    

    我没有在上面使用这个的原因是因为timedelta() 不需要几个月作为参数


    如果您希望将其转换回字符串,则可以像这样使用strftime() 函数:

    >>> new_time_1 = time_1 + relativedelta(months=1)
    >>> print(datetime.strftime(new_time_1, '%d/%m/%Y'))
    30/09/2017
    >>> print(datetime.strftime(time_1, '%d/%m/%Y'))
    31/08/2017
    

    如果由于某种原因您需要使用 time 模块(例如您的代码的一部分)但您想将其转换为 datetime 对象(出于此类原因),那么我将您推荐给 @ 987654323@问题。

    【讨论】:

    • 非常感谢,我已将 date_1 字符串存储在列表中,以便在使用 date_1 = ''.join(str(x) for x in self.date_1) 时输出它们。如何从字符串中获取日期 31/08/2017 以及如何将其添加到第二天以使其显示 1/09/2017 如果可以以不同的方式执行?
    • @DanielEzekiel 检查我的编辑...这能回答你的问题吗?
    • 不,不是真的,当您添加日期时,如果我的日期是 29、30、31 或其他日期,它应该添加到下个月。有没有办法在不添加月份的情况下做到这一点,只添加一天?
    • @DanielEzekiel 啊,这就是你要做的from datetime import timedelta; time_1 + timedelta(days=1)。因为timedelta 没有使用months 参数,所以我没有在我的原始答案中使用它
    • 哦,我明白了,我怎么知道我需要添加到下个月,因为有些月份有30,有些月份有31
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多