当前位置: 首页 > 面试题库 >

在Python中从日期中减去一个月的最简单方法是什么?

凌善
2023-03-14
问题内容

如果只有timedelta在构造函数中有一个month参数。那么最简单的方法是什么?

编辑:
正如下面所指出的,我对此并没有太认真的思考。我真正想要的是上个月的任何一天,因为最终我将只获得年份和月份。因此,给定一个datetime对象,返回
上个月的任何datetime对象 的最简单方法是 什么


问题答案:

尝试这个:

def monthdelta(date, delta):
    m, y = (date.month+delta) % 12, date.year + ((date.month)+delta-1) // 12
    if not m: m = 12
    d = min(date.day, [31,
        29 if y%4==0 and (not y%100==0 or y%400 == 0) else 28,
        31,30,31,30,31,31,30,31,30,31][m-1])
    return date.replace(day=d,month=m, year=y)

>>> for m in range(-12, 12):
    print(monthdelta(datetime.now(), m))


2009-08-06 16:12:27.823000
2009-09-06 16:12:27.855000
2009-10-06 16:12:27.870000
2009-11-06 16:12:27.870000
2009-12-06 16:12:27.870000
2010-01-06 16:12:27.870000
2010-02-06 16:12:27.870000
2010-03-06 16:12:27.886000
2010-04-06 16:12:27.886000
2010-05-06 16:12:27.886000
2010-06-06 16:12:27.886000
2010-07-06 16:12:27.886000
2010-08-06 16:12:27.901000
2010-09-06 16:12:27.901000
2010-10-06 16:12:27.901000
2010-11-06 16:12:27.901000
2010-12-06 16:12:27.901000
2011-01-06 16:12:27.917000
2011-02-06 16:12:27.917000
2011-03-06 16:12:27.917000
2011-04-06 16:12:27.917000
2011-05-06 16:12:27.917000
2011-06-06 16:12:27.933000
2011-07-06 16:12:27.933000
>>> monthdelta(datetime(2010,3,30), -1)
datetime.datetime(2010, 2, 28, 0, 0)
>>> monthdelta(datetime(2008,3,30), -1)
datetime.datetime(2008, 2, 29, 0, 0)

编辑 更正为也处理一天。

编辑 另请参见困惑的答案,指出了以下更简单的计算方法d

d = min(date.day, calendar.monthrange(y, m)[1])


 类似资料:
  • 问题内容: 我有一个对象。减去一天的最佳方法是什么? 问题答案: 你可以使用对象:

  • 问题内容: 在SQL Server中,最简单/最干净的方法是使日期时间基于另一个日期时间表示月份的第一天吗?例如,我有一个变量或具有2005年3月3日14:23的列,我想获得2005年3月1日00:00(作为日期时间,而不是varchar) 问题答案: 要在列上运行此命令,请用您的列名替换GetDate()。 此代码的技巧是使用DateDiff。DateDiff返回一个整数。第二个参数(0)表示S

  • 我想知道在FreeMarker中从今天的日期减去日期的最好方法是什么? 我有一个用户的注册日期在这种格式:2015-06-15 05:12:35.890,我要做的是得到他们注册到现在之间的年数。(全年,不需要1年6个月/1.5年为例) 谁能告诉我做这件事的最好方法吗?

  • 我JasperReport中有这样的代码,就像< code > new simple date format(" DD/MM/yyyy ")。format(new Date())-24 * 3600 * 1000 但是它不起作用,我正在尝试从今天开始减去一天。但它是这样显示今天的

  • 问题内容: 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 有谁知道约会(例如今天)和回溯X天的简单方法吗? 因此,例如,如果我想计算今天之前5天的日期。 问题答案: 尝试这样的事情: 请注意,这将修改日期对象并返回更新日期的时间值。

  • 问题内容: 我需要用mysql减去1个月零4天,我看到命令 完美适用于1个月但1个月零4天,使用31天对于每个月带来30、29、28的每月无效。我无法添加31 + 4,30 + 4,等等 问题答案: 使用 [docs] 像: