Python养成记

19、基本日期和时间类型:datetime

2022-04-03  本文已影响0人  魔方宫殿
Life is short, you need Python!

上集回顾:

  1. 向上取整:math.ceil(x)
  2. 向下取整:math.floor(x)
  3. 阶乘:math.factorial(x)
  4. 最大公约数:math.gcd(*integers)
  5. 平方根:math.sqrt(x)
  6. 其他: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, monthday 参数是必须的。参数必须是在下面范围内的整数:

>>> 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

二、解析时间

  1. 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)
  1. 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'

本集总结:

  1. datetime构造器
  2. 解析时间
  3. 当前时间
  4. 格式化时间

下集见

上一篇下一篇

猜你喜欢

热点阅读