首发于 Python基础

Python-时间模块time、datetime介绍

一、Python时间

在Python中,通常有以下几种方法来表示时间:

1、时间戳-timestamp

时间戳表示的是,从1970年1月1日00:00:00开始按秒计算的偏移量,返回的是float类型的时间,比如:

1584070028.777221。

2、格式化的时间字符串

格式化的时间字符串,比如:“2022-3-13 11:30”

3、元组形式的时间(stuct_time)

元组时间有9个元素,分别是:

tm_year 年: 2022

tm_mon 月:1~12

tm_mday 日:1~31

tm_hour 时:0~23

tm_min 分: 0~59

tm_sec 秒: 0~61

tm_wday 周 :0~6

tm_yday 一年中第几天:0~366

tm_isdst 是否是夏令时 默认-1,生效设置为1,不生效设置为0

比如time.stuct_time(tm_year=2020, tm_mon=3, tm_mday=13, tm_hour=11, tm_min=40, tm_sec=30, tm_wday=5, tm_yday=100, tm_isdst=0)

4、UTC时间

世界协调时间(coordinated universal time),即格林威治天文时间,世界标准时间,我国属于UTC+8, 又称东8区。

二、time模块方法

1、time.time()

返回当前时间的时间戳

import time
time.time()
# >> 1648793136.478446

2、time.localtime([secs])

将一个时间戳转换为当前时区的stuct_time,若secs参数未提供,则以当前时间为准。

import time
time.localtime()
# >> time.struct_time(tm_year=2022, tm_mon=4, tm_mday=1, tm_hour=14, tm_min=7, tm_sec=15, tm_wday=4, tm_yday=91, tm_isdst=0)
time.localtime(123443.23)
# >> time.struct_time(tm_year=1970, tm_mon=1, tm_mday=2, tm_hour=18, tm_min=17, tm_sec=23, tm_wday=4, tm_yday=2, tm_isdst=0)

3、time.gmtime([secs])

和localtime()方法类似,gmtime()是将一个时间戳转为为utc(0时区)的sutct_time。

time.gmtime()
# >> time.struct_time(tm_year=2022, tm_mon=4, tm_mday=1, tm_hour=6, tm_min=13, tm_sec=45, tm_wday=4, tm_yday=91, tm_isdst=0)

4、time.mktime(t)

将一个struct_time转换为时间戳,它是time.localtime()的反操作。

time.mktime(time.struct_time((2020, 3, 13, 12, 22, 29, 4, 73, 0)))
# >> 1584073349.0

5、time.sleep(secs)

将线程推迟指定的时间运行,单位为秒

6、timeasctime([t])

把表示时间的元组或者stuct_time表示成以下形式:Fri Mar 3 12:43:46 2020,如果没有参数将会以time.localtime()作为参数传入。

time.asctime(time.struct_time((2020, 3, 3, 12, 43, 46, 4, 73, 0)))
# >> 'Fri Mar  3 12:43:46 2020'

7、time.ctime([secs])

把一个时间戳转化为asctime()的形式。如果参数为给定,默认以time.time()为参数。相当于time.asctime(time.localtime(secs))。

time.ctime()
# >> 'Fri Apr  1 14:22:55 2022'

8、time.strftime(format[,t])

把一个代表时间的元组或者stuct_time(比如由time.localtime()和time,gmtime()返回的)转化为格式化的时间字符串,如果t未指定,将默认传入time.localtime()。

字符串转时间格式对应表:
    %a ——> 星期的缩写
%A ——> 完整的星期的名称
%b ——> 月份的缩写
%B ——> 完整的月份名称
%c ——> “Fri Mar 13 19:42:30 2020"格式
%d ——> 十进制数格式的日期[01-31]
%H ——> 小时(24小时制) 十进制数[00, 23]
%I ——> 小时(12小时制)十进制数[01-12]
%j ——> 一年中的一天(十进制)[ 001-366]
%m ——> 月份(十进制)[01-12]
%M ——> 分钟数(十进制数)[00-59]
%p ——> AM 或 PM
%S ——> 秒数[00-59]
%U ——> 一年中的周数(星期日作为一周的第一天)十进制数[0-53]
%w ——> 星期数(十进制)[0-6]
%W ——> 一年中的周数(星期一作为一周的第一天)十进制数[0-53]
%x ——> 日期表示(月/日/不带实际的年份)比如:"03/13/20"
%X ——> 时间表示(时:分:秒)比如:”19:52:34“
%y ——> 不带实际的年份(十进制数)[0-99]
%Y ——> 待时机的年份(十进制数)
%z ——> 时区偏移指示与格式+ HHMM或-HHMM形式的UTC / GMT的正或负时差,其中H表示十进制小时数字,M表示小数分钟数字[-23:59,+ 23:59]。
%Z ——> 时区名称,例如”中国标准时间“
%% ——> ”%“字符


time.strftime("%Y-%m-%d %X %A")
# >> '2022-04-01 14:24:05 Friday'


三、datetime模块

相比time模块,datetime模块更加直观、更容易调用。

datetime模块有以下几个类:

1) datetime.date : 表示日期类型。常用的属性由year, month, day;

2) datetime.time: 表示时间的类。常用的属性有 hour,minute, second, microsecond;

3) datetime.datetime: 表示日期时间;

4) datetime.timedelta: 表示时间间隔,即两个施加点之间的长度;

5) datetime.tzinfo: 与时区有关的信息;

1、datetime.datetime.now()

返回当前的日期类型,d = datetime.dateime.now(),通过d.timestamp(), d.today(), d.time(), d.timetuple()等方法调用。

import datetime
datetime.datetime.now()
# >> datetime.datetime(2022, 4, 1, 14, 29, 3, 960686)

2、datetime.date.frotimestamp()

把一个时间戳转化为datetime时间类型。

datetime.date.fromtimestamp(3245466545.34545)
# >> datetime.date(2072, 11, 4)

3、时间运算 datetime.timedelta()

d = datetime.datetime.now()
print(d)
# >> 2022-04-01 14:36:24.264947
d1 = d + datetime.timedelta(5)  # 当前时间加上5天
print(d1)
# >> 2022-04-06 14:36:24.264947
d2 = d + datetime.timedelta(hours=5)
print(d2)