|
| 1 | +# 4-6 日期和时间 |
| 2 | +在应用中日期、时间、时间戳(时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量),是会经常要取用的数据,比如得到今天的日期、 |
| 3 | + |
| 4 | +星期、一个月的起始和结束等,时间戳经常会用到数据签名或者数据流水号等;使用日期和时间,需要导入库datetime、time, |
| 5 | + |
| 6 | +- time 是继于系统Unix Timestamp的,因此,使用time可能在不同的平台,有差异;日期范围限定在1970 - 2038 之间 |
| 7 | +- datetime 可以理解为time的升级版,弥补了time的不足,提供了更丰富的功能函数 |
| 8 | + |
| 9 | +日期和时间,因为存在不同系统的差异,因此常会用到格式化,python提供的日期格式化符号主要有 |
| 10 | +格式|含义 |
| 11 | +-|-| |
| 12 | +%a|本地(locale)简化星期名称| |
| 13 | +%A|本地完整星期名称| |
| 14 | +%b|本地简化月份名称| |
| 15 | +%c|本地相应的日期和时间表示| |
| 16 | +%d|一个月中的第几天(01-31)| |
| 17 | +%H|一天中的第几个小时(24小时制,00-23)| |
| 18 | +%I|第几个小时(12小时制,01-12)| |
| 19 | +%j|一年中的第几天(001-366)| |
| 20 | +%m|月份(01-12)| |
| 21 | +%M|分钟数(00-59)| |
| 22 | +%p|本地am或者pm的相应符| |
| 23 | +%S|秒(01-61)| |
| 24 | +%U|一年中的星期数(00-53,星期天是首日)第一个星期天之前的所有天数都放在第0周。 |
| 25 | +%w|一个星期中的第几天(0-6,0是周日)| |
| 26 | +%W|和%U基本相同,不同的是%W以星期一为一个星期的开始 |
| 27 | +%x|本地相应日期| |
| 28 | +%X|本地相应时间| |
| 29 | +%y|去掉世纪的年份(00-99)| |
| 30 | +%Y|完整的年份| |
| 31 | +%Z|时区的名字(如果不存在为空字符)| |
| 32 | +%%|'%'字符| |
| 33 | +这些格式化字符,不需要做记忆,会通过下面的代码进行讲解 |
| 34 | +## 1.time的用法 |
| 35 | +### 代码区 1 |
| 36 | +```python |
| 37 | +1 import time |
| 38 | +2 |
| 39 | +3 # 打印一个当前的时间戳 |
| 40 | +4 t = time.time() |
| 41 | +5 print(t) |
| 42 | +6 |
| 43 | +``` |
| 44 | + |
| 45 | +```python |
| 46 | +1650187292.611 |
| 47 | +``` |
| 48 | +### 代码区 2 |
| 49 | +```python |
| 50 | +1 import time |
| 51 | +2 |
| 52 | +3 # 返回当前系统的时间 |
| 53 | +4 t = time.localtime() |
| 54 | +5 print(t) |
| 55 | +6 |
| 56 | +``` |
| 57 | + |
| 58 | +```python |
| 59 | +time.struct_time(tm_year=2022, tm_mon=4, tm_mday=17, tm_hour=17, tm_min=29, tm_sec=6, tm_wday=6, tm_yday=107, tm_isdst=0) |
| 60 | +``` |
| 61 | +可以看到,localtime返回的是一个时间的元组,里面包含了,当前时间的年、月、日、小时、分秒等,当然看着和熟悉的电脑日期格式不太一样. |
| 62 | +### 代码区 3 |
| 63 | +```python |
| 64 | +1 # 练习题 试着用前面学习到的四舍五入,对上面的时间戳取个整; 取出返回的元组时间里的年 |
| 65 | +2 |
| 66 | +``` |
| 67 | + |
| 68 | + |
| 69 | +## 2.datetime用法 |
| 70 | +datetime根据字面意思主是date和time的组合, datetime模块,主要包含了5个类: |
| 71 | + |
| 72 | +- datetime.date:日期操作的类 |
| 73 | +- datetime.datetime:日期时间操作的类 |
| 74 | +- datetime.time:时间操作的类 |
| 75 | +- datetime.timedelta:时间间隔,即两个时间点的间隔 |
| 76 | +- datetime.tzinfo:时区的相关信息 |
| 77 | +### 代码区 4 |
| 78 | +```python |
| 79 | +1 import datetime as dt |
| 80 | + |
| 81 | +2 # 获取今天的日期 |
| 82 | +3 today = dt.date.today() |
| 83 | +4 print('今天是:', today) |
| 84 | +5 |
| 85 | +6 print('今年是:', today.year) |
| 86 | +7 |
| 87 | +``` |
| 88 | + |
| 89 | +```python |
| 90 | +今天是: 2022-04-17 |
| 91 | +今年是: 2022 |
| 92 | +``` |
| 93 | +### 代码区 5 |
| 94 | +```python |
| 95 | +1 import datetime as dt |
| 96 | +2 # 获取当前的时间 |
| 97 | +3 now = dt.datetime.now() |
| 98 | +4 print(now) |
| 99 | +5 # 用到了上面的格式化字符, |
| 100 | +6 print(now.strftime('%Y')) |
| 101 | +7 |
| 102 | +``` |
| 103 | + |
| 104 | +```python |
| 105 | +2022-03-21 14:21:43.026081 |
| 106 | +2022 |
| 107 | +``` |
| 108 | +### 代码区 6 |
| 109 | +```python |
| 110 | +1 # 练习题 试着输出更多格式的时间 |
| 111 | +2 |
| 112 | +``` |
| 113 | + |
| 114 | +### 代码区 7 |
| 115 | +```python |
| 116 | +# 如何取到昨天的日期? |
| 117 | +1 import datetime as dt |
| 118 | +2 |
| 119 | +3 today = dt.date.today() |
| 120 | +4 |
| 121 | +5 print('今天是:', today) |
| 122 | +6 yesterday = today - dt.timedelta(days=-1) |
| 123 | +7 print('昨天是:', yesterday) |
| 124 | +8 |
| 125 | +``` |
| 126 | + |
| 127 | +```python |
| 128 | +今天是: 2022-04-17 |
| 129 | +昨天是: 2022-04-18 |
| 130 | +``` |
| 131 | +### 代码区 8 |
| 132 | +```python |
| 133 | +1 # 练习题 算一下前天的日期 |
| 134 | +2 |
| 135 | +``` |
| 136 | + |
| 137 | + |
| 138 | + |
| 139 | + |
| 140 | + |
| 141 | + |
0 commit comments