datetime模块
Posted cxysailor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了datetime模块相关的知识,希望对你有一定的参考价值。
datetime模块1. 简介2. date
类3. time
类4. datetime
类5. timedelta
类5.1 数学计算的类date datetime timedelta
5.2 时间变化量的计算会产生进位,即会影响到上一级的时间5.3 timedelta
与date/datetime/timedelta
之间的计算5.3.1 timedelta
与date
的计算5.3.2 timedelta
与datetime
的计算5.3.4 timedelta
与timedelta
的计算6. 一个应用实例
datetime模块
1. 简介
封装了一些和日期、时间相关的类。
主要是用来进行数学计算的。
有如下几个重要的类:
-
date
类 - 年月日 -
time
类 - 时分秒 -
datetime
类 - 上面两个的组合 -
timedelta
类 - 时间的变化量,即两个日期或两个时间之间的差值
2. date
类
1 """datetime模块中的date类""" 2 import datetime 3 ? 4 # 获取一个日期对象 5 d = datetime.date(2020, 5, 22) 6 print(d) 7 # 获取date对象的各个属性 8 print(d.year) 9 print(d.month) 10 print(d.day) 11 ? 12 # 输出结果: 13 2020-05-22 14 2020 15 5 16 22
3. time
类
class
datetime.time
An idealized time, independent of any particular day, assuming that every day has exactly 246060 seconds. (There is no notion of “leap seconds” here.) Attributes:
hour
,minute
,second
,microsecond
, andtzinfo
.
1 """datetime模块中的time类""" 2 import datetime 3 ? 4 # 获取一个时间对象 5 t = datetime.time(17, 45, 32) 6 print(t) 7 # 获取时间对象的属性 8 print(t.hour) 9 print(t.minute) 10 print(t.second) 11 ? 12 # 输出结果: 13 17:45:32 14 17 15 45 16 32
4. datetime
类
1 """datetime模块中的datetime类""" 2 import datetime 3 ? 4 # 获取一个日期时间对象 5 dt = datetime.datetime(2020, 5, 22, 19, 29, 16) 6 print(dt) 7 # 获取日期时间对象的属性 8 print(dt.year) 9 print(dt.month) 10 print(dt.day) 11 print(dt.hour) 12 print(dt.minute) 13 print(dt.second) 14 ? 15 # 输出结果: 16 2020-05-22 19:29:16 17 2020 18 5 19 22 20 19 21 29 22 16
5. timedelta
类
A
timedelta
object represents a duration, the difference between two dates or times.
class
datetime.timedelta
(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)All arguments are optional and default to
0
. Arguments may be integers or floats, and may be positive or negative. Only days, seconds and microseconds are stored internally.Arguments are converted to those units:
A millisecond is converted to 1000 microseconds.
A minute is converted to 60 seconds.
An hour is converted to 3600 seconds.
A week is converted to 7 days.
and days, seconds and microseconds are then normalized so that the representation is unique, with
0 <= microseconds < 1000000
0 <= seconds < 3600*24
(the number of seconds in one day)
-999999999 <= days <= 999999999
5.1 数学计算的类date datetime timedelta
timedelta
只能和以下3个类进行数学计算
-
date
类 -
datetime
类 -
timedelta
类
1 """datetime模块中的timedelta""" 2 import datetime 3 ? 4 td = datetime.timedelta(days=1) 5 print(td) 6 # 参与数学计算 7 d = datetime.date(2020, 5, 22) # 创建一个时间对象 8 # 对这个日期时间对象进行计算 9 d_after = d + td # 日期加一天 10 print(d_after) 11 d_before = d - td # 日期减一天 12 print(d_before) 13 ? 14 # 输出结果: 15 1 day, 0:00:00 16 2020-05-23 17 2020-05-21
5.2 时间变化量的计算会产生进位,即会影响到上一级的时间
1 """datetime模块中的timedelta""" 2 import datetime 3 ? 4 # 时间变化量的计算会产生进位,即会影响到上一级的时间 5 t = datetime.datetime(2020, 5, 22, 21, 24, 59) # 2020-05-22 21:24:59 6 td = datetime.timedelta(seconds=3) # 时间变化量为3秒 7 new_t = t + td # 新时间=原时间+3秒 8 print(new_t) 9 ? 10 # 输出结果: 11 2020-05-22 21:25:02
5.3 timedelta
与date/datetime/timedelta
之间的计算
5.3.1 timedelta
与date
的计算
1 """timedelta与date/datetime/timedelta之间的计算""" 2 ? 3 import datetime 4 ? 5 # create a timedelta object 6 td = datetime.timedelta(days=3) 7 ? 8 # timedelta与date的计算 9 d = datetime.date(2015, 8, 8) 10 new_day = d + td 11 print(new_day) 12 print(type(new_day)) # 查看新日期new_day的类型 13 ? 14 # 输出结果: 15 2015-08-11 # 看不到秒数 16 <class ‘datetime.date‘> # 与原来日期的类型一致
5.3.2 timedelta
与datetime
的计算
1 """timedelta与date/datetime/timedelta之间的计算""" 2 ? 3 import datetime 4 ? 5 # create a timedelta object 6 td = datetime.timedelta(days=3) 7 ? 8 # timedelta与datetime的计算 9 d = datetime.datetime(2015, 8, 8) 10 new_day = d + td 11 print(new_day) 12 print(type(new_day)) # 查看新日期new_day的类型 13 ? 14 # 输出结果: 15 2015-08-11 00:00:00 # 可以有秒数输出 16 <class ‘datetime.datetime‘> # 与原来日期的类型一致
5.3.4 timedelta
与timedelta
的计算
1 """timedelta与date/datetime/timedelta之间的计算""" 2 ? 3 import datetime 4 ? 5 # create a timedelta object 6 td = datetime.timedelta(days=3) 7 ? 8 # timedelta与timedelta的计算 9 td1 = datetime.timedelta(seconds=50) 10 new_td = td + td1 11 print(new_td) 12 print(type(new_td)) # 查看新时间段的类型 13 ? 14 # 输出结果: 15 3 days, 0:00:50 16 <class ‘datetime.timedelta‘> # 与原来时间段的类型一致
6. 一个应用实例
一个例子:计算某一年的2月份有多少天
普通算法:
-
先判断这一年是平年还是润年
-
平年 - 28天;润年 - 29天
使用datetime
模块的算法:
-
先获取这一年的3月1日
-
从3月1日减去1天,看得到的日期是几号
-
若是2月28日 - 平年 - 28天;若是2月29日 - 润年 - 29天
1 """一个例子:计算某一年的2月份有多少天 2 ? 3 普通算法: 4 1. 先判断这一年是平年还是润年 5 2. 平年 - 28天;润年 - 29天 6 ? 7 使用datetime模块的算法: 8 1. 先获取这一年的3月1日 9 2. 从3月1日减去1天,看得到的日期是几号 10 3. 若是2月28日 - 平年 - 28天;若是2月29日 - 润年 - 29天""" 11 import datetime 12 ? 13 # 从键盘输入一个年份 14 year = input(‘Please enter a year: ‘) 15 # 创建该年份的date对象 16 day = datetime.date(int(year), 3, 1) 17 # 创建一天的时间变化量 18 td = datetime.timedelta(days=1) 19 # 将day减去一天,得到3月1日的前一天 20 new_day = day - td 21 # if new_day.day == 28: 22 # print(‘February in the year %s is 28 days‘ % year) 23 # else: 24 # print(‘February in the year %s is 29 days‘ % year) 25 print(‘February in the year %s is %d days‘ % (year, new_day.day)) 26 ? 27 # 输出结果: 28 Please enter a year: 2015 29 February in the year 2015 is 28 days 30 ? 31 Please enter a year: 2020 32 February in the year 2020 is 29 days
以上是关于datetime模块的主要内容,如果未能解决你的问题,请参考以下文章
如何使用模块化代码片段中的LeakCanary检测内存泄漏?