X、日期与时间模块(二)

\color{green}{本篇文章主要对Python的日期与时间模块做一个简单的介绍,旨在记录自己的学习历程,也欢迎小伙伴提出意见大家一起进步!}

datetime类

datetime模块包含timedelta、datetime、date和time等常用的类

2.1.timedelta类

timedelta 对象表示两个 date 或者 time 的时间间隔

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

所有参数都是可选的并且默认为 0。这些参数可以是整数或者浮点数,也可以是正数或者负数。

只有 days, seconds 和 microseconds 会存储在内部。参数单位的换算规则如下:

1毫秒会转换成1000微秒。

1分钟会转换成60秒。

1小时会转换成3600秒。

1星期会转换成7天。
并且 days, seconds, microseconds 会经标准化处理以保证表达方式的唯一性,即:

0 <= microseconds < 1000000

0 <= seconds < 3600*24 (一天的秒数)

-999999999 <= days <= 999999999

from datetime import timedelta

类属性

最小的间隔

timedelta.min

datetime.timedelta(days=-999999999)

最大的间隔

timedelta.max

datetime.timedelta(days=999999999, seconds=86399, microseconds=999999)

两个不相等的 timedelta 类对象最小的间隔

timedelta.resolution

datetime.timedelta(microseconds=1)

实例属性

delta = timedelta(days=50,seconds=27,microseconds=10)
print(delta)

50 days, 0:00:27.000010

间隔天数

delta.days

50

间隔秒数

delta.seconds

27

间隔微秒数

delta.microseconds

10

实例方法

返回时间间隔包含了多少秒

delta.total_seconds()

4320027.00001

注释:

结果正确,但可能会溢出。

结果正确,不会溢出。

除以0将会抛出异常  ZeroDivisionError 。

-timedelta.max 不是一个 timedelta 类对象。

timedelta 对象的字符串表示形式类似于其内部表示形式被规范化。对于负时间增量,这会导致一些不寻常的结果。例如:

timedelta(hours=-5)
datetime.timedelta(days=-1, seconds=68400)
print(_)
-1 day, 19:00:00
表达式 t2 - t3 通常与 t2 + (-t3) 是等价的,除非 t3 等于 timedelta.max; 在这种情况下前者会返回结果,而后者则会溢出。

2.2. datetime类
datetime 对象是包含来自 date 对象和 time 对象的所有信息的单一对象。

与 date 对象一样,datetime 假定当前的Gregorian向前后两个方向无限延伸;与 time 对象一样,datetime 假定每一天恰好有 3600*24 秒。

class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
from datetime import datetime

返回本地时区的当前日期时间

datetime.today()

datetime.datetime(2021, 2, 8, 22, 38, 20, 550529)

获取本地时区当前日期时间

datetime.today()

datetime.datetime(2021, 2, 8, 22, 38, 20, 880645)

获取当前utc日期时间

datetime.utcnow()

datetime.datetime(2021, 2, 8, 13, 16, 23, 118320)

返回时间戳的对应日期时间,本地时区

datetime.fromtimestamp(time.time())

datetime.datetime(2021, 2, 8, 22, 41, 5, 35913)

返回时间戳的对应日期时间,utc时区

datetime.utcfromtimestamp(time.time())

datetime.datetime(2021, 2, 8, 14, 43, 48, 569356)

返回 Gregorian 日历时间序号对应的日期,其中公元 1 年 1 月 1 日的序号为 1

datetime.fromordinal(1)

datetime.datetime(1, 1, 1, 0, 0)

返回一个新的 datetime 对象,对象的日期部分等于给定的 date 对象的值,而其时间部分等于给定的 time 对象的值

d = datetime.today()
datetime.combine(d.date(),d.time())

datetime.datetime(2021, 2, 8, 22, 46, 38, 695820)

返回一个对应于 date.isoformat() 和 datetime.isoformat() 所提供的某一种 date_string 的 datetime 对象

datetime.fromisoformat('2021-02-10')

datetime.datetime(2021, 2, 10, 0, 0)

返回 年、周、日对应的万年历中对应的日期,比如2021年第一个完整周的第1天是1月4日

返回一个对应于 date_string,根据 format 进行解析得到的 datetime 对象

datetime.strptime('2021-02-10 12:12:12','%Y-%m-%d %H:%M:%S')

datetime.datetime(2021, 2, 10, 12, 12, 12)

类属性

最早的可表示 datetime,datetime(MINYEAR, 1, 1, tzinfo=None)

datetime.min

datetime.datetime(1, 1, 1, 0, 0)

最晚的可表示 datetime,datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None)

datetime.max

datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)

两个不相等的 datetime 对象之间可能的最小间隔

date.resolution

datetime.timedelta(days=1)

实例属性

d = datetime.today()
print(d)

2021-02-08 22:53:25.610051

年份

d.year

2021

月份

d.month

2

d.day

8

小时

d.hour

22

分钟

d.minute

53

d.second

25

微秒

d.microsecond

610051

实例方法

返回具有同样 year, month 和 day 值的 date 对象

d.date()

datetime.date(2021, 2, 8)

返回具有同样 hour, minute, second, microsecond 和 fold 值的 time 对象

d.time()

datetime.time(22, 53, 25, 610051)

返回具有同样 hour, minute, second, microsecond, fold 和 tzinfo 属性性的 time 对象

d.timetz()

datetime.time(22, 53, 25, 610051)

返回一个具有同样属性值的 datetime,除非通过任何关键字参数为某些属性指定了新值

d.replace(day=11)

datetime.datetime(2021, 2, 11, 22, 53, 25, 610051)

返回对应于 datetime 实例的 时间戳

d.timestamp()

1612796005.610051

返回一个整数代表星期几,星期一为 0,星期天为 6

d.weekday()

0

返回一个整数代表星期几,星期一为 1,星期天为 7

d.isoweekday()

1

返回一个表示日期和时间的字符串

d.ctime()

'Mon Feb 8 22:53:25 2021'

返回一个由显式格式字符串所指明的代表日期和时间的字符串,要获取格式指令的完整列表

d.strftime('%Y-%m')

'2021-02'

2.3. date类

date是表示日期的类,常用属性:year, month, day

date 对象代表一个理想化历法中的日期(年、月和日),即当今的Gregorian向前后两个方向无限延伸。

公元 1 年 1 月 1日是第 1 日,公元 1 年 1 月 2 日是第 2 日,依此类推。

class datetime.date(year, month, day)

所有参数都是必要的。参数必须是在下面范围内的整数:

MINYEAR <= year <= MAXYEAR

1 <= month <= 12

1 <= 日期 <= 给定年月对应的天数
如果参数不在这些范围内,则抛出 ValueError 异常。

from datetime import date

返回本地时区当前日期

date.today()

datetime.date(2021, 2, 8)

返回时间戳的对应日期,本地时区

date.fromtimestamp(time.time())

datetime.date(2021, 2, 8)

返回 Gregorian 日历时间序号对应的日期,其中公元 1 年 1 月 1 日的序号为 1

date.fromisoformat('2021-02-09')

datetime.date(1, 1, 1)

返回一个对应于以 YYYY-MM-DD 格式给出的 date_string 的 date 对象

date.fromisoformat('2021-02-09')

datetime.date(2021, 2, 9)

类属性

最小的日期

date.min

datetime.date(1, 1, 1)

最大的日期

date.max

datetime.date(9999, 12, 31)

两个日期对象的最小间隔

date.resolution

datetime.timedelta(days=1)

实例属性

date对象对应的年

date.today().year

2021

date对象对应的月

date.today().month

2

date对象对应的日

date.today().day

8

实例方法

d = date.today()
print(d)

2021-02-08

返回一个具有同样值的日期

d.replace(day=10)

datetime.date(2021, 2, 10)

返回一个 time.struct_time,即 time.localtime() 所返回的类型

d.timetuple()

time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=39, tm_isdst=-1)

返回日期的Gregorian序号,其中公元 1 年 1 月 1 日的序号为 1

d.toordinal()

737829

返回一个整数代表星期几,星期一为0,星期天为6

d.weekday()

0

返回一个整数代表星期几,星期一为1,星期天为7

d.isoweekday()

1

返回一个由三部分组成的 named tuple 对象: year, week 和 weekday

d.isocalendar()

(2021, 6, 1)

返回一个以 ISO 8601 格式 YYYY-MM-DD 来表示日期的字符串

d.isoformat()

'2021-02-08'

对于日期对象 d, str(d) 等价于 d.isoformat()

d.__str__()

'2021-02-08'

返回一个表示日期的字符串

d.ctime()

'Mon Feb 8 00:00:00 2021'

返回一个由显式格式字符串所指明的代表日期的字符串

d.strftime('%Y-%m')

'2021-02'

与 date.strftime() 相同。 此方法使得为 date 对象指定以 格式化字符串字面值 表示的格式化字符串以及使用 str.format() 进行格式化成为可能

d.__format__('%Y-%m')

'2021-02'

小例子:计算生日倒计时

import time
from datetime import date

今天 = date.today()
生日 = date(today.year, 4, 7)
生日倒计时 = abs(生日-今天)

生日倒计时.days

58

2.4. time类

一个 time 对象代表某日的(本地)时间,它独立于任何特定日期,并可通过 tzinfo 对象来调整。

class datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

所有参数都是可选的。tzinfo 可以是 None,或者是一个 tzinfo 子类的实例。其余的参数必须是在下面范围内的整数:

0 <= hour < 24,

0 <= minute < 60,

0 <= second < 60,

0 <= microsecond < 1000000,

fold in [0, 1].
如果给出一个此范围以外的参数,则会引发 ValueError。所有参数值默认为 0,只有 tzinfo 默认为 None。

关于 time类的 属性、方法等和date类差不多,这里不再做过多赘述。

摘自公众号:可以叫我才哥

你可能感兴趣的:(X、日期与时间模块(二))