Bootstrap

python模块 — 日期时间管理模块 time,datetime

一、time时间模块

1、 时间格式

time模块中时间表现的格式主要有三种:

  • timestamp 时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。
  • struct_time 时间元组,共有九个元素组。
  • format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。

时间格式转换如图:

 2、常用函数

函数说明
sleep设置休眠时间
time返回自纪元(时间基准1970年1月1日)以来的当前时间的时间戳,以秒为单位,可以通过时间戳来做日期的运算
localtime将时间戳转换成时间元组,获取当前本地时间,北京时间,返回类型为 struct_time 对象
gmtime

将时间戳转换成时间元组,获取UTC时间(格林尼治时间),世界统一时间,返回类型为 struct_time 对象

mktime将时间元组转换成时间时间戳
ctime将时间戳转换成时间字符串,如果时间戳不存在,则使用 localtime() 返回的当前时间
asctime将时间元组转换成时间字符串,如果时间元组不存在,则使用 localtime() 返回的当前时间。
strftime格式化时间,将时间元组对象转换成时间字符串
strptime格式化时间,将时间字符串转换成时间元

3、时间元组

  • struct_time 对象是一个包含九个元素的元组,可以通过索引和属性名访问值

二、datetime日期模块

datetime 基于 time 进行了封装,提供了更多实用的函数,推荐使用。

datetime 模块中包含了如下几个类:

说明
date日期
time时间
datetime日期和时间
tzinfo时区
timedelta时间差

注:@classmethod 修饰的方法为类方法,不需要实例化可以直接调用;不带任何装饰器的方法为实例方法。

1、 date(日期类型)

date 类表示一个由年、月、日组成的日期。

格式:datetime.date(year, month, day)。

  • year 范围为:[1, 9999]
  • month 范围为:[1, 12]
  • day 范围为 [1, 给定年月对应的天数]

类方法:

方法/属性说明
today()返回当前本地时间,格式YYYY-MM-DD
fromtimestamp()

参数是时间戳,返回本地时间,格式 YYYY-MM-DD

实例方法:

方法说明
ctime()返回一个ctime类型的日期字符串,格式 Fri May  7 00:00:00 2021
isoformat()返回一个iso格式的日期字符串,格式 YYYY-MM-DD
strftime()返回一个自定义格式的日期字符串

实例:

import datetime

# date 日期类,包含年、月、日。精确度到天
print("***这是类方法***")
print(datetime.date)
print(datetime.date.today())
print(datetime.date.fromtimestamp(0))   # 参数是时间戳

print("***这是实例方法***")
t = datetime.date(2021,5,10)
print(t)
print(t.today())
print(t.ctime())    # 返回一个ctime格式的日期字符串
print(t.isoformat())    # 返回一个iso格式的日期字符串
print(t.strftime("%Y-%m-%d %a"))    # 返回一个自定义格式的日期字符串

---------------------------------------------------------------------------------
运行结果:
***这是类方法***
<class 'datetime.date'>
2021-05-10
1970-01-01
***这是实例方法***
2021-05-10
2021-05-10
Mon May 10 00:00:00 2021
2021-05-10
2021-05-10 Mon

2、 time(时间类型)

time 类表示由时、分、秒、微秒组成的时间。

格式:time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

  • hour 小时,范围为:[0, 24)
  • minute 分钟,范围为:[0, 60)
  • second 秒,范围为:[0, 60)
  • microsecond 微秒,范围为:[0, 1000000)
  • tzinfo 时区
  • fold 范围为: [0, 1]

类方法:

方法/属性说明

实例方法:

方法说明
isoformat()返回一个iso格式的时间字符串
strftime()返回一个自定义格式的时间字符串

实例:

import time

# time 时间类,包含时、分、秒、微秒。精确到微秒,而且可以具有时区(tzinfo)属性。
print("***这是类方法***")
print(datetime.time)

print("***这是实例方法***")
t = datetime.time(17,47,50)
print(t.hour)
print(t.isoformat())    # 返回一个iso格式的时间字符串
print(t.strftime('%H:%M:%S %p'))    # 返回一个自定义格式的时间字符串

---------------------------------------------------------------------------------
运行结果:
***这是类方法***
<class 'datetime.time'>
***这是实例方法***
17
17:47:50
17:47:50 PM

3、 datetime (时间日期类型)

datetime 包括了 date 与 time 的所有信息。

格式为:datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

类方法:

方法说明
today()返回当前本地时间
now()返回当前本地时间
utcnow()返回当前UTC时间
fromtimestamp()参数为时间戳,返回本地时间
utcfromtimestamp()参数为时间戳,返回UTC时间

实例方法:

方法说明
date()返回 date 对象
time()返回 time 对象
ctime()

返回一个ctime格式的日期时间字符串

isoformat()

返回一个iso格式的日期时间字符串

strformat()返回一个自定义格式的日期时间字符串

实例:

import datetime 

# datetime 日期时间类,包含date和time的所有信息
print("***这是类方法***")
print(datetime.datetime)
print(datetime.datetime.today())
print(datetime.datetime.now())      # 返回当前本地时间
print(datetime.datetime.utcnow())   # 返回当前utc时间
print(datetime.datetime.fromtimestamp(0))       # 根据时间戳返回本地时间
print(datetime.datetime.utcfromtimestamp(0))    #根据时间戳返回UTC时间

print("***这是实例方法***")
t = datetime.datetime(year=2020,month=5,day=10,hour=18,minute=32,second=30) # 实例化对象,年月日必填
print(t)
print(t.date())     # 返回date对象
print(t.time())     # 返回time对象
print(t.ctime())    # 返回一个ctime格式的日期时间字符串
print(t.isoformat())    # 返回一个iso格式的日期时间字符串
print(t.strftime("%Y-%m-%d"))

----------------------------------------------------------------------------------
运行结果:
***这是类方法***
<class 'datetime.datetime'>
2021-05-10 18:43:52.816934
2021-05-10 18:43:52.816934
2021-05-10 10:43:52.816934
1970-01-01 08:00:00
1970-01-01 00:00:00
***这是实例方法***
2020-05-10 18:32:30
2020-05-10
18:32:30
Sun May 10 18:32:30 2020
2020-05-10T18:32:30
2020-05-10

4、tzinfo(时区类型)

几种时间:

  • 本地时间(北京时间)
  • UTC时间(格林尼治时间)
  • DST时间(夏时令时间)

zinfo是一个抽象类,所以不能直接被实例化。子类必须重写name()、utcoffset()和dst()方法

推荐使用pytz模块,里面自带了适合各个国家和时区的tzinfo对象,我们可以直接使用。

5、 timedelta(时间差类型)

timedelta 对象表示两个datetime 对象的时间差值。

格式:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
其中参数都是可选,默认值为0

import datetime

# timedelta 时间差
era_time = datetime.datetime.fromtimestamp(0)
now_time = datetime.datetime.now()
print(era_time)
print(now_time)
#计算当前时间到纪元时间的时间差
delta_time = now_time - era_time
print(type(delta_time))
print(delta_time)
print(delta_time.days)  # 差了多少天
#当前日期往后加一天
new_time = now_time + datetime.timedelta(days=1)
print(type(new_time))
print(new_time)

---------------------------------------------------------------------------------
运行结果:
1970-01-01 08:00:00
2021-05-11 10:55:10.129696
<class 'datetime.timedelta'>
18758 days, 2:55:10.129696
18758
<class 'datetime.datetime'>
2021-05-12 10:55:10.129696


参考地址:

Python中的datetime模块的使用 - 简书

;