datetime模块

Posted cxysailor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了datetime模块相关的知识,希望对你有一定的参考价值。

datetime模块1. 简介2. date3. time4. datetime5. timedelta5.1 数学计算的类date datetime timedelta5.2 时间变化量的计算会产生进位,即会影响到上一级的时间5.3 timedeltadate/datetime/timedelta之间的计算5.3.1 timedeltadate的计算5.3.2 timedeltadatetime的计算5.3.4 timedeltatimedelta的计算6. 一个应用实例

datetime模块

1. 简介

封装了一些和日期、时间相关的类。

主要是用来进行数学计算的。

有如下几个重要的类:

  • date类 - 年月日

  • time类 - 时分秒

  • datetime类 - 上面两个的组合

  • timedelta类 - 时间的变化量,即两个日期或两个时间之间的差值

2. date

  • class datetime.``date

    An idealized naive date, assuming the current Gregorian calendar always was, and always will be, in effect. Attributes: year, month, and day.

 
 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, and tzinfo.

 
 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 timedeltadate/datetime/timedelta之间的计算

5.3.1 timedeltadate的计算

 
 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 timedeltadatetime的计算

 
 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 timedeltatimedelta的计算

 
 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月份有多少天

普通算法:

  1. 先判断这一年是平年还是润年

  2. 平年 - 28天;润年 - 29天

使用datetime模块的算法:

  1. 先获取这一年的3月1日

  2. 从3月1日减去1天,看得到的日期是几号

  3. 若是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检测内存泄漏?

记录C#常用的代码片段

学习笔记:python3,代码片段(2017)

创建使用模块与datetime模块使用

python模块time&datetime&json & picle&14.logging等

python常用模块之time&datetime模块