Python中time和datetime模块详解

简介: Python中time和datetime模块详解

1、time 时间模块

Hello,大家好,我是景天,今天我们来聊一聊python的时间处理模块time和datetime。

1.时间模块相关知识

#时间戳指从1970年1月1日0时0分0秒到指定时间之间的秒数,时间戳是秒,可以使用到2038年的某一天

#UTC时间: 世界约定的时间表示方式,世界统一时间格式,世界协调时间!

#夏令时: 在夏令时时间状态下,时间会调快1个小时

#时间元组是使用元祖格式表示时间的一种方式

格式1(自定义):

(年,月,日,时,分,秒,周几,一年中的第几天,是否是夏令时时间)

格式2(系统提供):

(tm_year = 年,tm_month = 月,tm_day = 日,tm _hour = 时, tm_min = 分, tm _sec = 秒, tm _wday = 周几, tm _yday = 一年中的第几天,tm_isdst = 是否是夏令时时间)

    0   年   4位数完整年份    四位数1997
    1   月   1-12月           1 - 12
    2   日   1-31天           1 - 31
    3   时   0-23时           0 - 23
    4   分   0-59分           0 - 59
    5   秒   0-61秒           0 - 61
    6   周几 周一-周天         0 - 6   0是周一
    7   年中第几天    共366天  1 - 366
    8   夏令时  两种           0,1  0是  其他都不是  

#格式化时间字符串:

格式 含义

%a 本地(locale)简化星期名称

%A 本地完整星期名称

%b 本地简化月份名称

%B 本地完整月份名称

%c 本地相应的日期和时间表示

%d 一个月中的第几天(01 - 31)

%H 一天中的第几个小时(24 小时制,00 - 23)

%I 一天中的第几个小时(12 小时制,01 - 12)

%j 一年中的第几天(001 - 366)

%m 月份(01 - 12)

%M 分钟数(00 - 59)

%p 本地 am 或者 pm 的相应符

%S 秒(01 - 61)

%U 一年中的星期数(00 - 53 星期天是一个星期的开始)第一个星期天之前的所有天数都放在第 0 周

%w 一个星期中的第几天(0 - 6,0 是星期天)

%W 和 %U 基本相同,不同的是 %W 以星期一为一个星期的开始

%X 本地相应时间

%y 去掉世纪的年份(00 - 99) 两位数表示年份

%Y 完整的年份 四位数字表示年份

%z 用 +HHMM 或 -HHMM 表示距离格林威治的时区偏移(H 代表十进制的小时数,M 代表十进制的分钟数)

%% %号本身

#–不常用的属性函数(了解)

*gmtime() 获取UTC时间元祖(世界标准时间)

*time.timezone 获取当前时区(时区的时间差)

*time.altzone 获取当前时区(夏令时)

*time.daylight 获取夏令时状态

2.time()

获取本地时间戳

res = time.time()

print(res)

3.localtime <=> mktime => ctime

#localtime() 获取本地时间元组 (参数是时间戳,默认当前)

(tm_year = 年,tm_month = 月,tm_day = 日,tm _hour = 时, tm_min = 分, tm _sec = 秒, tm _wday = 周几, tm _yday = 一年中的第几天,tm_isdst = 是否是夏令时时间)

# 默认当前时间元组
ttp = time.localtime()
print(ttp)

#根据指定的时间戳,获取时间元祖

ttp = time.localtime(1601360000)

print(ttp)

#mktime() 通过时间元组获取时间戳 小数位舍弃 (参数是时间元组)

res1 = time.mktime(ttp)

print(res1)

#ctime() 获取本地时间字符串(参数是时间戳,默认当前), 将时间戳转换成时间

# 默认当前时间戳
res = time.ctime()
print(res)

#指定具体的时间戳

res = time.ctime(res1)

print(res)

4.asctime() 通过时间元组获取时间字符串(参数是时间元组) (了解)

“”“只能通过手动的形式来调星期”“”

ttp = (2020,9,29,16,48,30,0,0,0)

res = time.asctime(ttp)

print(res)

5.mktime 配合 ctime来取代asctime (推荐)

“”“自动识别当前是周几”“”

res = time.mktime(ttp)

strvar = time.ctime(res)

print(strvar)

6.sleep()

程序睡眠等待

time.sleep(10)

print(“我睡醒了”)

#strftime() 格式化时间字符串(格式化字符串,时间元祖)

“”“linux支持中文 windows不支持 。python3.11 Windows支持中文”“”

strvar = time.strftime(“%Y-%m-%d %H:%M:%S”)

strvar = time.strftime(“%Y-%m-%d %H:%M:%S 是杜兰特的死神的生日”)

print(strvar)

strvar = time.strftime(“%Y-%m-%d %H:%M:%S”,(2020,10,31,10,10,10,0,0,0))

print(strvar)

7.strptime()

将时间字符串通过指定格式提取到时间元组中(时间字符串,格式化字符串)

“”“注意:替换时间格式化标签时,必须严丝合缝.不能随便加空格或特殊字符”“”

ttp = time.strptime(“2020年的9月29号是死神杜兰特的生日,晚上20点30分40秒准备轰趴派队”,“%Y年的%m月%d号是死神杜兰特的生日,晚上%H点%M分%S秒准备轰趴派队”)

print(ttp)

strftime : 把时间元组 => 字符串

strptime : 把字符串 => 时间元组

8用于计算程序运行的时间 (了解)

time模块提供一个perf_counter()函数,它返回性能计数器的值,包括在睡眠期间和系统范围内流逝的时间。返回值的参考点未定义,因此只有连续调用结果之间的差异有效。

最后,time()模块还提供一个返回值单位为纳秒(ns)的,更高精度的性能计数器函数,perf_counter_ns()


#startime = time.perf_counter()

startime = time.time()

for i in range(10000000):

pass

#endtime = time.perf_counter()

endtime = time.time()

print(“中间用时:”,endtime-startime)

两者之差单位是秒

可以用time.time()取代

2、datetime由于time模块会在2038年的不能再使用,因此datetime模块即将成为最好的替代,

下面我们就详细介绍下datetime模块的使用

import datetime

dt = datetime.datetime.now()

print(‘DateTime in Default Formatting:’, dt)

print(‘Formatted DateTime’, dt.strftime(“%m/%d/%y %H:%M:%S”))

print(“Current year:”, dt.strftime(“%Y”))

print(“Month of year:”, dt.strftime(“%B”))

print(“Week number of the year:”, dt.strftime(“%W”))

print(“Weekday of the week:”, dt.strftime(“%w”))

print(“Day of year:”, dt.strftime(“%j”))

print(“Day of the month:”, dt.strftime(“%d”))

Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime。time模块我在之前的文章已经有所介绍,它提供的接口与C标准库time.h基本一致。相比于time模块,datetime模块的接口则更直观、更容易调用。

1、datetime中包含三个类date ,time,datetime

函数datetime.combine(date,time)可以得到dateime,datetime.date()、datetime.time()可以获得date和time

2、datetime time 与string的转换

今天就来讲讲datetime模块。

1、datetime模块定义了两个常量:datetime.MINYEAR和datetime.MAXYEAR,分别表示datetime所能表示的最 小、最大年份。其中,MINYEAR = 1,MAXYEAR = 9999。

2、datetime模块定义了下面这几个类:

datetime.date:表示日期的类。常用的属性有year, month,

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

datetime.datetime:表示日期时间。

datetime.timedelta:表示时间间隔,即两个时间点之间的长度。

datetime.tzinfo:与时区有关的相关信息。

注 :上面这些类型的对象都是不可变(immutable)的。

下面详细介绍这些类的使用方式。

一、date类

date类表示一个日期。日期由年、月、日组成(地球人都知道~~)。date类的构造函数如下:

class datetime.date(year, month, day):参数的意义就不多作解释了,只是有几点要注意一下:

year的范围是[MINYEAR, MAXYEAR],即[1, 9999];

month的范围是[1, 12]。(月份是从1开始的,不是从0开始的_);

day的最大值根据给定的year, month参数来决定。例如闰年2月份有29天;

date类定义了一些常用的类方法与类属性,方便我们操作:


date.max、date.min:date对象所能表示的最大、最小日期;

date.resolution:date对象表示日期的最小单位。这里是天。

date.today():返回一个表示当前本地日期的date对象;

date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;

datetime.fromordinal(ordinal):将Gregorian日历时间转换为date对象;(Gregorian Calendar :一种日历表示方法,类似于我国的农历,西方国家使用比较多,此处不详细展开讨论。)

使用例子:

date提供的实例方法和属性:

date.year、date.month、date.day:年、月、日;

date.replace(year, month, day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)

date.timetuple():返回日期对应的time.struct_time对象;

date.toordinal():返回日期对应的Gregorian Calendar日期;

date.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;

data.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;

date.isocalendar():返回格式如(year,month,day)的元组;

date.isoformat():返回格式如’YYYY-MM-DD’的字符串;

date.strftime(fmt):自定义格式化字符串。在下面详细讲解。

date还对某些操作进行了重载,它允许我们对日期进行如下一些操作:

date2 = date1 + timedelta # 日期加上一个间隔,返回一个新的日期对象(timedelta将在下面介绍,表示时间间隔)

date2 = date1 - timedelta # 日期隔去间隔,返回一个新的日期对象

timedelta = date1 - date2 # 两个日期相减,返回一个时间间隔对象

date1 < date2 # 两个日期进行比较

注: 对日期进行操作时,要防止日期超出它所能表示的范围。

二、Time类

time类表示时间,由时、分、秒以及微秒组成。time类的构造函数如下:

class datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ) :各参数的意义不作解释,这里留意一下参数tzinfo,它表示时区信息。注意一下各参数的取值范围:hour的范围为[0, 24),minute的范围为[0, 60),second的范围为[0, 60),microsecond的范围为[0, 1000000)。

time类定义的类属性:

time.min、time.max:time类所能表示的最小、最大时间。其中,time.min = time(0, 0, 0, 0), time.max = time(23, 59, 59, 999999);

time.resolution:时间的最小单位,这里是1微秒;

time类提供的实例方法和属性:

time.hour、time.minute、time.second、time.microsecond:时、分、秒、微秒;

time.tzinfo:时区信息;

time.replace([ hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ):创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性(原有对象仍保持不变);

time.isoformat():返回型如"HH:MM:SS"格式的字符串表示;

time.strftime(fmt):返回自定义格式化字符串。在下面详细介绍;

三、datetime类

datetime是date与time的结合体,包括date与time的所有信息。它的构造函数如下:datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ),各参数的含义与date、time的构造函数中的一样,要注意参数值的范围。

datetime类定义的类属性与方法:

datetime.min、datetime.max:datetime所能表示的最小值与最大值;

datetime.resolution:datetime最小单位;

datetime.today():返回一个表示当前本地时间的datetime对象;

datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;

datetime.utcnow():返回一个当前utc时间的datetime对象;

datetime.fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息;

datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;

datetime.combine(date, time):根据date和time,创建一个datetime对象;

datetime.strptime(date_string, format):将格式字符串转换为datetime对象;

datetime类提供的实例方法与属性(很多属性或方法在date和time中已经出现过,在此有类似的意义,这里只罗列这些方法名,具体含义不再逐个展开介绍,可以参考上文对date与time类的讲解。):

datetime.year、month、day、hour、minute、second、microsecond、tzinfo:

datetime.date():获取date对象;

datetime.time():获取time对象;

datetime. replace ([ year[ , month[ , day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ] ] ]):

datetime. timetuple ()

datetime. utctimetuple ()

datetime. toordinal ()

datetime. weekday ()

datetime. isocalendar ()

datetime. isoformat ([ sep] )

datetime. ctime ():返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple()));

datetime. strftime (format)

像date一样,也可以对两个datetime对象进行比较,或者相减返回一个时间间隔对象,或者日期时间加上一个间隔返回一个新的日期时间对象。这里不提供详细的例子,看客自己动手试一下~~

四、转化为字符串

datetime、date、time都提供了strftime()方法,该方法接收一个格式字符串,输出日期时间的字符串表示。下表是从python手册中拉过来的,我对些进行了简单的翻译(翻译的有点噢口~~)。

格式字符及意义

%a 星期的简写。如 星期三为Web

%A 星期的全写。如 星期三为Wednesday

%b 月份的简写。如4月份为Apr

%B月份的全写。如4月份为April

%c: 日期时间的字符串表示。(如: 04/07/10 10:43:39)

%d: 日在这个月中的天数(是这个月的第几天)

%f: 微秒(范围[0,999999])

%H: 小时(24小时制,[0, 23])

%I: 小时(12小时制,[0, 11])

%j: 日在年中的天数 [001,366](是当年的第几天)

%m: 月份([01,12])

%M: 分钟([00,59])

%p: AM或者PM

%S: 秒(范围为[00,61],为什么不是[00, 59],参考python手册_)

%U: 周在当年的周数当年的第几周),星期天作为周的第一天

%w: 今天在这周的天数,范围为[0, 6],6表示星期天

%W: 周在当年的周数(是当年的第几周),星期一作为周的第一天

%x: 日期字符串(如:04/07/10)

%X: 时间字符串(如:10:43:39)

%y: 2个数字表示的年份

%Y: 4个数字表示的年份

%z: 与utc时间的间隔 (如果是本地时间,返回空字符串)

%Z: 时区名称(如果是本地时间,返回空字符串)

%%: %% => %

指定时间戳转换为时间

当前时间转换为字符串,datetime用的是datetime.datetime.now().strftime()


相关文章
|
3天前
|
Python
【Python进阶(五)】——模块搜索及工作目录
【Python进阶(五)】——模块搜索及工作目录
|
3天前
|
机器学习/深度学习 存储 Python
|
2天前
|
Python
Python使用typing模块(从Python 3.5开始)
【5月更文挑战第10天】Python使用typing模块(从Python 3.5开始)
12 3
|
3天前
|
Python
在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存
【5月更文挑战第12天】在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存在,该函数对路径进行检查,存在则返回True,不存在则返回False。示例代码展示了如何检查'example.txt'文件是否存在并相应打印消息。此外,`os.path.isfile()`用于确认路径是否为文件,仅当是文件时返回True,否则返回False,同样配以示例说明其用法。
23 2
|
3天前
|
Python Windows
python中的异常与模块
python中的异常与模块
12 1
|
3天前
|
JSON 数据格式 Python
Python标准库中包含了json模块,可以帮助你轻松处理JSON数据
【4月更文挑战第30天】Python的json模块简化了JSON数据与Python对象之间的转换。使用`json.dumps()`可将字典转为JSON字符串,如`{&quot;name&quot;: &quot;John&quot;, &quot;age&quot;: 30, &quot;city&quot;: &quot;New York&quot;}`,而`json.loads()`则能将JSON字符串转回字典。通过`json.load()`从文件读取JSON数据,`json.dump()`则用于将数据写入文件。
18 1
|
3天前
|
Python
Python实现压缩解压---tarfile模块详解
Python实现压缩解压---tarfile模块详解
|
3天前
|
存储 Linux 数据安全/隐私保护
python的压缩模块zipfile详解
python的压缩模块zipfile详解
|
3天前
|
Linux Python Windows
python的os模块详细解读(二)
python的os模块详细解读(二)
|
3天前
|
移动开发 Linux Shell
python的os模块详细解读(一)
python的os模块详细解读(一)
python的os模块详细解读(一)