python时间模块,如何让时间一次改变一个月?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python时间模块,如何让时间一次改变一个月?相关的知识,希望对你有一定的参考价值。
比如date+=date.resolution是一次加一天,怎么才能一次加一个月
参考技术A from dateutil.relativedelta import relativedeltadate + 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
d1 = datetime.datetime(2008, 8, 31)
d2 = datetime_offset_by_month(d1, 13)
print '2008-8-31 + 13 month'
print d2
d1 = datetime.datetime(2007, 1, 30)
d2 = datetime_offset_by_month(d1, 13)
print '2007-1-30 + 13 month'
print d2
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 程序?