0. 引入
上篇文章介绍了Python的标量类型,这篇文章,我将介绍一下Python的日期和时间及其处理的常用方法!
1. Python时间类型简介
Python中常用的时间表示方法有以下几种:
-
时间戳 -
格式化的时间字符串 -
time模块的time.struct_time类 -
datetime模块的datetime类
其中时间戳(imestamp) 又称为Unix时间、POSIX时间。它表示从格林尼治时间1970年1月1日0时0分0秒开始到现在所经过的毫秒数,其值为float类型。 但Python返回的是秒数,需要说明的是时间戳是个差值,其值与时区无关。
格式化的时间字符串是形如’2022-01-01 13:14:52’的字符串
time模块和datetime模块我将在下面进行介绍。
2.time模块和datetime模块
Python提供了time模块和datetime模块,我将分别进行简单介绍。
2.1 time模块
time模块我主要介绍两个函数:time.time()和time.localtime()函数
1) time.time()函数
time.time()函数会返回时间戳,即自1970-1-1 0:00:00 至今所经历的秒数
import time
time.time()
1641043618.381585
2) time.localtime([secs])函数
? time.localtime([secs])函数会返回以指定时间戳对应的本地时间的 struct_time对象,参数为时间戳,需要人为传入,如果不传入参数,则函数会默认返回函数执行时的本地时间。
import time
time.localtime(1641043618.381585)
time.struct_time(tm_year=2022, tm_mon=1, tm_mday=1, tm_hour=21, tm_min=26, tm_sec=58, tm_wday=5, tm_yday=1, tm_isdst=0)
import time
time.localtime()
time.struct_time(tm_year=2022, tm_mon=1, tm_mday=1, tm_hour=21, tm_min=38, tm_sec=34, tm_wday=5, tm_yday=1, tm_isdst=0)
读者可能会对struct_time对象中的属性有疑惑,所以下面会简单介绍一下各个属性的含义:
time模块中struct_time对象中的属性解释
属性名称
|
描述/含义
|
---|
tm_year
|
年份
|
tm_month
|
月份,取值范围为[1,12]
|
tm_day
|
一个月中的第几天,取值范围为[1, 31]
|
tm_hour
|
小时, 取值范围为[0, 23]
|
tm_min
|
分钟,取值范围为[0, 59]
|
tm_sec
|
秒,取值范围为[0, 61](60或61是闰秒)
|
tm_wday
|
星期几,取值范围为[0, 6],0表示星期一
|
tm_yday
|
一年中的第几天,取值范围为[1, 366]
|
tm_isdst
|
是否为夏令时,取值为0, 1, -1
|
2.2 datetime模块
Python中内建的datetime模块提供了datetime、date、time、timedelta类型,其中datetime类型是包含日期和时间信息的,尤其需要注意的是,这些类的对象都是不可变的。建立datetime类型需要自己传入参数:
1) datetime
from datetime import datetime, date, time
dt = datetime(2022, 1, 1, 21, 30, 28)
dt
datetime.datetime(2022, 1, 1, 21, 30, 28)
对于上面得到的datetime实例,可以使用它的对象方法来获取它的date、time、year、month等对象:
dt.time()
dt.date()
print(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second)
2) strftime、strptime函数
? strftime方法将datetime转换为字符串,该方法需要你传入你想要的字符串格式:
dt.strftime('%m/%d/%Y %H:%M')
'01/01/2022 21:30'
dt.strftime('%Y-%m-%d %H:%M:%S')
'2022-01-01 21:30:28'
strftime方法将字符串转换为datetime,需要传入字符串及其对应的格式:
datetime.strptime('20220101213028', '%Y%m%d%H%M%S')
datetime.datetime(2022, 1, 1, 21, 30, 28)
datetime.strptime('2022-01-01 21:30:28', '%Y-%m-%d %H:%M:%S')
datetime.datetime(2022, 1, 1, 21, 30, 28)
下面表格是完整的格式化详细说明
Datetime格式化详细说明
类型
|
描述
|
---|
%Y
|
四位的年份
|
%y
|
两位的年份
|
%m
|
两位的月份,取值范围为[01, 12]
|
%d
|
两位的天数值,取值范围为[01, 31]
|
%H
|
小时值(24小时制), 取值范围为[00, 23]
|
%I
|
小时值(12小时制), 取值范围为[01, 12]
|
%M
|
两位数的分钟值,取值范围为[00, 59]
|
%S
|
秒值,取值范围为[00, 61](60、61用于区分闰秒)
|
%w
|
星期值,取值范围为[0, 6],0表示星期天
|
%U
|
一年中第几个星期的值,取值范围为[00, 53];星期天是每周第一天,第一个星期天前的一周是第0个星期
|
%W
|
一年中第几个星期的值,取值范围为[00, 53];星期一是每周第一天,第一个星期一前的一周是第0个星期
|
%z
|
UTC时区偏置,格式为+HHMM或-HHMM;如果是简单时区则为空
|
%F
|
%Y-%m-%d的简写(例如2022-1-1)
|
%D
|
%m/%d/%y的简写(例如1/1/22)
|
3) datetime.replace
在聚合或分组时间序列数据时,常常会将datatime时间序列中的一些值进行替换,如将分钟、秒替换为0,此时就需要用到datetime.replace()函数了:
replace(
year=self.year,
month=self.month,
day=self.day,
hour=self.hour,
minute=self.minute,
second=self.second,
microsecond=self.microsecond,
tzinfo=self.tzinfo,
* fold=0)
例子:
from datetime import datetime, date, time
dt = datetime(2022, 1, 1, 21, 30, 28).replace(minute=0,second=0)
datetime.datetime(2022, 1, 1, 21, 0)
4) datetime.timedelta
两个不同的datetime对象会产生一个datetime.timedelta类型的对象,表示两个时间之间的差值:
from datetime import datetime, date, time
dt1 = datetime(2022, 1, 1, 21, 30, 28)
dt2 = datetime(2021, 12, 31, 20, 10, 1)
delta = dt1 - dt2
delta
datetime.timedelta(1, 4827)
当然也可以给一个datetime.datetime对象加上 datetime.timedelta,生成新的datetime.datetime对象:
dt2 + delta
datetime.datetime(2022, 1, 1, 21, 30, 28)
日期和时间就介绍到这里,下篇文章我将介绍Python数据结构中的元组!
|