python时间模块,如何让时间一次改变一个月?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python时间模块,如何让时间一次改变一个月?相关的知识,希望对你有一定的参考价值。

比如date+=date.resolution是一次加一天,怎么才能一次加一个月

参考技术A from dateutil.relativedelta import relativedelta
date + relativedelta(months=1)本回答被提问者采纳
参考技术B Python语言: Python中按月增加datetime
  #coding=utf-8
  #from:
  import datetime
  # input datetime1, and an month offset
  # return the result datetime
  def datetime_offset_by_month(datetime1, n = 1):
  # create a shortcut object for one day
  one_day = datetime.timedelta(days = 1)
  # first use div and mod to determine year cycle
  q,r = divmod(datetime1.month + n, 12)
  # create a datetime2
  # to be the last day of the target month
  datetime2 = datetime.datetime(
  datetime1.year + q, r + 1, 1) - one_day
  # if input date is the last day of this month
  # then the output date should also be the last
  # day of the target month, although the day
  # may be different.
  # for example:
  # datetime1 = 8.31
  # datetime2 = 9.30
  if datetime1.month != (datetime1 + one_day).month:
  return datetime2
  # if datetime1 day is bigger than last day of
  # target month, then, use datetime2
  # for example:
  # datetime1 = 10.31
  # datetime2 = 11.30
  if datetime1.day >= datetime2.day:
  return datetime2
  # then, here, we just replace datetime2's day
  # with the same of datetime1, that's ok.
  return datetime2.replace(day = datetime1.day)
  #------------------------------------------
  # test
  d1 = datetime.datetime(2008, 8, 17)
  d2 = datetime_offset_by_month(d1, 13)
  print '2008-8-17 + 13 month'
  print d2
  print
  d1 = datetime.datetime(2008, 8, 31)
  d2 = datetime_offset_by_month(d1, 13)
  print '2008-8-31 + 13 month'
  print d2
  print
  d1 = datetime.datetime(2007, 1, 30)
  d2 = datetime_offset_by_month(d1, 13)
  print '2007-1-30 + 13 month'
  print d2
  print
  result = """
  2008-8-17 + 13 month
  2009-09-17 00:00:00
  2008-8-31 + 13 month
  2009-09-30 00:00:00
  2007-1-30 + 13 month
  2008-02-29 00:00:00
  """

如果测试模块位于姐妹文件夹中,如何让我的 Python 单元测试导入测试模块?

【中文标题】如果测试模块位于姐妹文件夹中,如何让我的 Python 单元测试导入测试模块?【英文标题】:How to make my Python unit tests to import the tested modules if they are in sister folders? 【发布时间】:2011-01-16 18:43:12 【问题描述】:

我仍然对import 声明感到困惑。如果我在同一级别有 2 个文件夹:

    源代码 测试

如何让test中的py文件导入src中的模块? 有没有更好的解决方案(比如将一个文件夹放在另一个文件夹中?)

【问题讨论】:

一个非常相似的问题:***.com/questions/1896918 【参考方案1】:

你想要的代码是用于使用 src/module_name.py

from src import module_name 

并且根目录在您的 PYTHONPATH 上,例如你从根目录运行

您的目录结构是我使用的,但型号名称来自 src。我从J Calderone's blog 和

得到了这个结构

【讨论】:

包(文件夹)的名称中间可以有下划线吗? 另外,通过添加__init__.py 文件,确保 src 目录是一个包。 我将 src 目录添加到 PYTHONPATH,而不是 ROOT 路径。 Jader 是的,将 src 添加到 PYTHONPATH 确实有效 - 但您最终会获得许多条目并使其难以管理。如果您从项目的根目录运行,则无需更改环境 您可以在文件夹名称中包含 _,但这不是很好的样式(请参阅 PEP8)我只是用它来尝试在此处创建自记录代码。【参考方案2】:

试试这个:

import sys
import os
sys.path.append(os.path.join('..', 'src'))
import module_in_src_folder

经过编辑以支持任何平台

【讨论】:

投反对票,因为这涉及到 PYTHONPATH 的混乱。【参考方案3】:

我写的所有python项目都和OP完全一样:

项目文件夹
    源代码 测试

所有模块,无论是在 src、test 还是这些模块的子文件夹中,总是使用 Mark 在他的回答中显示的 import 的形式:

from src import module_name

我所做的是编写一个位于 Project Folder 中的模块,并递归地发现测试文件夹中的所有测试模块并让 unittest 运行所有这些测试。由于 python 在Project Folder 中运行,因此模块是相对于工作目录的。

这意味着测试就像任何其他想要从 src 获取模块的客户端一样。

【讨论】:

以上是关于python时间模块,如何让时间一次改变一个月?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 中的 subprocess 模块启动和停止 Linux 程序?

Anylogic:如何让代理在队列中等待直到它改变状态? (离散事件流程图)

安装 xmpppy python 库和识别模块时遇到问题

python常用模块之时间模块

python如何让程序每天只运行一次

如何让我的脚本在 Windows 上使用 python 每 30 分钟重复一次