上集回顾:
- 向上取整:math.ceil(x)
- 向下取整:math.floor(x)
- 阶乘:math.factorial(x)
- 最大公约数:math.gcd(*integers)
- 平方根:math.sqrt(x)
- 其他:math.pi、math.e
上集学习了常用的数学函数,这集来学习日期和时间相关的函数。datetime库包含了time、date和datetime三个类。time是时间类,包含有时分秒三个属性;date是日期类,包含年月日三个属性;datetime整合了date和time两个类的方法和属性。所以本集主要学习datetime类,相当于三个都学习了,如果需要单独使用日期或者时间的话,导入对应的类就行了。
一、构造器
按指定日期和时间生成对应datetime类的对象。
class datetime.datetime(year, month, day, hour=0, minute=0, second=0)
year, month 和 day 参数是必须的。参数必须是在下面范围内的整数:
-
MINYEAR <= year <= MAXYEAR
, -
1 <= month <= 12
, -
1 <= day <= 指定年月的天数
, -
0 <= hour < 24
, -
0 <= minute < 60
, -
0 <= second < 60
例如构造2008年8月8日8点8分8秒的对象:
>>> from datetime import datetime
>>> dt = datetime(2008, 8, 8, 8, 8, 8)
>>> dt
datetime.datetime(2008, 8, 8, 8, 8, 8)
>>> dt.year
2008
>>> dt.day
8
>>> dt.month
8
>>> dt.hour
8
>>> dt.minute
8
>>> dt.second
8
二、解析时间
-
datetime.fromtimestamp(timestamp)
通过POSIX时间戳解析到对应的datetime对象:
>>> datetime.fromtimestamp(1)
datetime.datetime(1970, 1, 1, 8, 0, 1)
>>> datetime.fromtimestamp(0) #时间戳最开始的日期
datetime.datetime(1970, 1, 1, 8, 0)
-
datetime.fromisoformat(date_string)
通过解析iso格式的日期时间字符串得到对应的datetime对象:
>>>
datetime.fromisoformat('2022-04-01')
datetime.datetime(2022, 4, 1, 0, 0)
>>> datetime.fromisoformat('2022-04-01 22:22:22')
datetime.datetime(2022, 4, 1, 22, 22, 22)
>>> datetime.fromisoformat('2022-04-01 22')
datetime.datetime(2022, 4, 1, 22, 0)
>>> datetime.fromisoformat('2022-04-01 22:1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Invalid isoformat string: '2022-04-01 22:1'
注意:除年份外,月、日、时、分和秒都需要用2位数表示,不然会解析出错。
三、当前时间
获取当前时间的对象可以通过today()和now()两个函数得到,分别来自date和time类。
>>> datetime.today()
datetime.datetime(2022, 4, 3, 22, 5, 1, 679597)
>>> datetime.now()
datetime.datetime(2022, 4, 3, 22, 5, 8, 215642)
还可以通过当前时间的时间戳解析出当前时间的对象:
>>> import time
>>> from datetime import datetime
>>> datetime.fromtimestamp(time.time())
datetime.datetime(2022, 4, 3, 22, 27, 55, 451387)
四、格式化
strftime(format) 方法,可以根据format的规则把时间格式化成对应的字符串。常用规则:
指令 | 含义 | 示例 |
---|---|---|
%Y | 十进制数表示的带世纪的年份。 | 2008、2022 |
%y | 补零后,以十进制数表示的,不带世纪的年份。 | 08、22 |
%m | 补零后,以十进制数显示的月份。 | 01, 02, ..., 12 |
%d | 补零后,以十进制数显示的月份中的一天。 | 01, 02, ..., 31 |
%H | 以补零后的十进制数表示的小时(24 小时制)。 | 00, 02, ..., 23 |
%I | 以补零后的十进制数表示的小时(12小时制)。 | 01, 02, ..., 12 |
%p | 上午或下午 AM 或 PM 。 | AM、PM |
%M | 补零后,以十进制数显示的分钟。 | 00, 02, ..., 59 |
%S | 补零后,以十进制数显示的秒。 | 00, 02, ..., 59 |
例如格式化为中文时间:
>>> dt = datetime.now()
>>> dt.strftime("%Y年%m月%d日 %H:%M:%S")
'2022年04月03日 22:49:44'
>>> dt.strftime("%Y年%m月%d日 %p %I:%M:%S")
'2022年04月03日 PM 10:49:44'
本集总结:
- datetime构造器
- 解析时间
- 当前时间
- 格式化时间
下集见
网友评论