资讯专栏INFORMATION COLUMN

Python日期和时间相关操作

Eric / 651人阅读

摘要:也只能传入这个参数说明这个对象其实是用来表示两个时间的间隔上面我们都是使用加上,那如果是减去这样呢其实得出结果就是相反而已,不明白可以动手试一下,对比一下或之后的结果。

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 函数部分代码

更新中...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44199.html

相关文章

  • PyTips 0x11 - Python 时间日期

    摘要:项目地址时间和日期可能涉及到不同的时区格式,同时又经常需要作为时间戳保存,有时候还需要进行一些加减操作,因此处理起来通常会因为方法太多而无从下手。中与时间和日期相关的标准库有个和。 项目地址:https://git.io/pytips 时间和日期可能涉及到不同的时区、格式,同时又经常需要作为时间戳保存,有时候还需要进行一些加减操作,因此处理起来通常会因为方法太多而无从下手。Python...

    2501207950 评论0 收藏0
  • SICP Python 描述 第二章 使用对象构建抽象 2.1 引言

    摘要:对象表示信息,但是同时和它们所表示的抽象概念行为一致。通过绑定行为和信息,对象提供了可靠独立的日期抽象。名称来源于实数在中表示的方式浮点表示。另一方面,对象可以表示很大范围内的分数,但是不能表示所有有理数。 2.1 引言 来源:2.1 Introduction 译者:飞龙 协议:CC BY-NC-SA 4.0 在第一章中,我们专注于计算过程,以及程序设计中函数的作用。我们看到了...

    phoenixsky 评论0 收藏0
  • python大佬的养成计划----os,datetime,time模块补充

    摘要:是否则检验指定的对象是否存在。由于的模块实现主要调用库,所以各个平台可能有所不同。时间格式时间戳的方式通常来说,时间戳是指格林威治时间年月日时分秒北京时间年月日时分秒起至现在的总秒数。元组方式元组共有个元素,返回的函数主要有,,。 os模块 os模块提供了多数操作系统的功能接口函数。当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,...

    frank_fun 评论0 收藏0
  • Python datetime模块参考手册

    摘要:模块提供的接口与标准库基本一致。相比于模块,模块的接口则更直观更容易调用。模块定义了两个常量这两个常量分别表示所能表示的最小最大年份。表示时间间隔,即两个时间点之间的长度。如月份为日期时间的字符串表示。 Python提供了多个内置模块用于操作日期时间,像 calendar,time,datetime。time模块提供的接口与C标准库 time.h 基本一致。相比于 time 模块,da...

    wums 评论0 收藏0
  • Python中的对日期时间的处理

    摘要:中提供了一个和的模块可以用来做格式化日期和时间的。格式化日期通过模块中方法来格式化日期函数接收时间元组并返回以可读字符串表示薪资的时间格式的话由参数决定。每日宽度间隔为字符每行的长度为是每星期的行数。 我们可以通过学习在Python中对日期时间的处理,可以在快速的完成工作,比如: 将日期时间作为日志信息的内容输入 计算某一个功能的执行时间 用日期命名一个文件的名称 记录或者展示文件的...

    techstay 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<