Python日期和时间相关操作
admin
2023-07-31 01:43:57
0

1. 先来看几个常用的

1.1 获取今天、昨天、明天的日期时间

from datetime import datetime, timedelta, date

\'\'\'今天\'\'\'
today1 = date.today()  # 精确到`天`
today2 = datetime.today()  # 精确到`微秒`
str(today1), str(today2)

# 结果:
# datetime.date(2015, 11, 20)
# datetime.datetime(2015, 11, 20, 16, 26, 21, 593990)
# (\'2015-11-20\', \'2015-11-20 16:26:21.593990)


\'\'\'昨天\'\'\'
yesterday1 = date.today() + timedelta(days=-1)
yesterday2 = datetime.today() + timedelta(days=-1)
str(yesterday1), str(yesterday2)

# 结果:
# datetime.date(2015, 11, 19)
# datetime.datetime(2015, 11, 19, 16, 26, 21, 593990)
# (\'2015-11-19\', \'2015-11-19 16:26:21.593990)


\'\'\'明天\'\'\'
tomorrow1 = date.today() + timedelta(days=1)
tomorrow2 = datetime.today() + timedelta(days=1)
str(tomorrow1), str(tomorrow2)

# 结果:
# datetime.date(2015, 11, 21)
# datetime.datetime(2015, 11, 21, 16, 26, 21, 593990)
# (\'2015-11-21\', \'2015-11-21 16:26:21.593990)

那获取几小时,几分钟,甚至几秒钟前后的时间呢?该怎么获取?

看如下的代码:

from datetime import datetime, timedelta

# 获取两小时前的时间
date_time = datetime.today() + timedelta(hours=-2)

其实就是给 timedelta() 这个类传入的参数变一下就可以了

可传入的参数有 timedelta(weeks, days, hours, second, milliseconds, microseconds) 每个参数都是可选参数,默认值为0,参数值必须是这些(整数浮点数正数负数

分别表示:timedelta(周,日,时,分,秒,毫秒,微秒)。也只能传入这7个参数

说明:timedelta 这个对象其实是用来表示两个时间的间隔

上面我们都是使用 datetime.today() 加上 timedelta(),那如果是 datetime.today() 减去 timedelta() 这样呢? 其实得出结果就是相反而已,不明白可以动手试一下,对比一下 +- 之后的结果。

1.2 下面来说说获取N年前/后,N月前/后的技巧

因为 timedelta() 这个对象传入的参数最大日期时间单位是,最小的是 微秒
所以,关于 需要我们手动处理一下

import datetime
import calendar

def conver(value, years=0, months=0):
    if months:
        more_years, months = divmod(months, 12)
        years += more_years

        if not (1 <= months + value.month <= 12):
            more_years, months = divmod(months + value.month, 12)
            months -= value.month
            years += more_years

    if months or years:
        year = value.year + years
        month = value.month + months

        # 此月份的的天号不存在转换后的月份里,将引发一个 ValueError 异常
        # 比如,1月份有31天,2月份有29天,我需要1月31号的后一个月的日期,也就是2月31号,但是2月份没有31号
        # 所以会引发一个 ValueError 异常
        # 下面这个异常处理就是为了解决这个问题的
        try:
            value = value.replace(year=year, month=month)
        except ValueError:
            _, destination_days = calendar.monthrange(year, month)
            day = value.day - destination_days
            month += 1
            if month > 12:
                month = 1
                year += 1
            value = value.replace(year=year, month=month, day=day)

    return value

today = datetime.datetime.today()
print today  # 今天日期
print conver(today, months=1)  # 1月后
print conver(today, months=-1)  # 1月前
print conver(today, years=1)  # 1年后
# 结果
# datetime.datetime(2015, 11, 20, 16, 26, 21, 593990)
# datetime.datetime(2015, 12, 20, 16, 26, 21, 593990)
# datetime.datetime(2015, 10, 20, 16, 26, 21, 593990)
# datetime.datetime(2016, 11, 20, 16, 26, 21, 593990)

代码取自 when.py 的 _add_time 函数部分代码

更新中…

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...