千家信息网

Python中time模块和datetime模块的常用操作以及几种常用时间格式间的转换

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,最常见以及常用的几种时间格式1、时间戳(timestamp),时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。2、时间元组(struct_time),共有九个元素组。3、格式化
千家信息网最后更新 2025年02月01日Python中time模块和datetime模块的常用操作以及几种常用时间格式间的转换

最常见以及常用的几种时间格式

1、时间戳(timestamp),时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。

2、时间元组(struct_time),共有九个元素组。

3、格式化时间(format time ),可以格式化为固定或者自定义格式,增加可读性。

#!/usr/bin/env python# -*- coding:utf-8 -*-import time#时间戳格式,默认获取当前时间 1500029143.7640195timestamp = time.time()print("获取当前时间戳:",timestamp)#获取元组(struct_time)的形式,默认获取当前时间struct_time_UTC8= time.localtime()print("获取当前东8区(中国)的时间:",struct_time_UTC8)struct_time_UTC= time.gmtime()print("获取当前的世界时间:",struct_time_UTC)'''注意:UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时'''#获取格式化后的时间,即将时间格式化为%Y-%m-%d %H:%M:%S格式的字符串format_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())print("按照指定格式格式化后的时间:",format_time)#  Fri Jul 14 18:45:43 2017(%a %b %d %H:%M:%S %Y)格式#将时间戳格式的时间转化成%a %b %d %H:%M:%S %Y格式,默认是将当前时间格式化style_time1 = time.ctime()print("将时间戳转化成%a %b %d %H:%M:%S %Y格式:",style_time1)#将元组(struct_time)形式的时间转换成%a %b %d %H:%M:%S %Y格式,默认也是将当前时间格式化style_time2 = time.asctime()print("将类似于元组(struct_time)转换成%a %b %d %H:%M:%S %Y格式:",style_time2)'''运行结果获取当前时间戳: 1500029371.4988112获取当前东8区(中国)的时间: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=18, tm_min=49, tm_sec=31, tm_wday=4, tm_yday=195, tm_isdst=0)获取当前的世界时间: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=49, tm_sec=31, tm_wday=4, tm_yday=195, tm_isdst=0)按照指定格式格式化后的时间: 2017-07-14 18:49:31将时间戳转化成%a %b %d %H:%M:%S %Y格式: Fri Jul 14 18:49:31 2017将类似于元组(struct_time)转换成%a %b %d %H:%M:%S %Y格式: Fri Jul 14 18:49:31 2017'''

一些基本概念

1.时间戳(timestamp)的形式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。返回时间戳方式的函数主要有time(),clock()等,默认是返回当前时间的时间戳。

2.元组(struct_time)的形式:struct_time元组共有9个元素。返回struct_time的函数主要有gmtime(),localtime(),strptime(),默认是返回当前时间的元组 (struct_time)形式,但也可以将其它时间段或者其它形式的时间格式转换为元组(struct_time)形式。

struct_time元组9个元素详细说明:

'''0   tm_year(年)  比如20111   tm_mon(月)   1 - 122   tm_mday(日)  1 - 313   tm_hour(时)  0 - 234   tm_min(分)   0 - 595   tm_sec(秒)   0 - 616   tm_wday(weekday)    0 - 6(0表示周日)7   tm_yday(一年中的第几天)    1 - 3668   tm_isdst(是否是夏令时)    默认为-1'''

几种时间格式的转换

#!/usr/bin/env python# -*- coding:utf-8 -*-import time#将一个时间戳转化为一个元组(struct_time)形式的时间格式:tuple_struct = time.localtime(1499703018.0)print("将一个时间戳转化为一个类似元组形式的时间格式:",tuple_struct)   #将一个时间戳转化为一个类似元组形式的时间格式: time.struct_time(tm_year=1973, tm_mon=11, tm_mday=30, tm_hour=5, tm_min=33, tm_sec=9, tm_wday=4, tm_yday=334, tm_isdst=0)#将元组(struct_time)形式的时间格式转化为时间戳:t = (2017, 7, 11, 0, 10, 18, 1, 192, 0)timestamp1 = time.mktime(time.struct_time(t))print("将类似于元组形式的时间格式转化为时间戳:",timestamp1)#将元组(struct_time)形式的时间格式转化为指定的格式如:%Y-%m-%d %H:%M:%Sformat_time1 = time.strftime("%Y-%m-%d %H:%M:%S",t)  #2017-07-11 00:10:18print("将类似于元素形式的时间格式转化为指定的格式如:%Y-%m-%d %H:%M:%S:",format_time1)#将格式化后的时间转化成元组(struct_time)形式的时间格式tuple_struct2 = time.strptime("2017-07-11 00:10:18","%Y-%m-%d %H:%M:%S")print("将格式化后的时间转化成元组形式的时间格式:",tuple_struct2)'''运行结果将一个时间戳转化为一个类似元组形式的时间格式: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=11, tm_hour=0, tm_min=10, tm_sec=18, tm_wday=1, tm_yday=192, tm_isdst=0)将类似于元组形式的时间格式转化为时间戳: 1499703018.0将类似于元素形式的时间格式转化为指定的格式如:%Y-%m-%d %H:%M:%S: 2017-07-11 00:10:18将格式化后的时间转化成元组形式的时间格式: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=11, tm_hour=0, tm_min=10, tm_sec=18, tm_wday=1, tm_yday=192, tm_isdst=-1)'''

为了方便理解和记忆这几种常用时间格式的转化,请看下边的图:

时间格式化时的参考帮助信息

'''时间格式化时的参考帮助信息:%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  本地相应日期  %X  本地相应时间  %y  去掉世纪的年份(00 - 99)    %Y  完整的年份   %Z  时区的名字(如果不存在为空字符)    %%  '%'字符'''

######################################################

datetime模块重新封装了time模块,提供了更多的类如:date、time、datetime、timedelta等。

1.datetim.data的常见用法示例

#!/usr/bin/env python# -*- coding:utf-8 -*-import datetime# 获得一个date对象d = datetime.date(2017,7,14)   #参数年、月、日#data能表示的最大日期d_max = d.maxprint("data能表示的最大日期:",d_max)#data能表示的最小日期d_min = d.minprint("data能表示的最大日期:",d.min)#获取当前日期d_today = d.today()print("获取当前日期:",d.today())#获取年、月、日year = d.yearmonth = d.monthday = d.dayprint("获取年%s、月%s、日%s"% (year,month,day))#根据给定的时间戳返回对应的日期d_date = d.fromtimestamp(12312432432)print("根据给定的时间戳返回对应的日期:",d_date)#返回weekday,如果星期一则返回0,星期二返回1,以此类推,2017-7-14是星期五d_weekday = d.weekday()print("返回weekday为:",d_weekday)#返回格式化为(YYYY-MM-DD)的字符串d_format = d.isoformat()print("返回格式化(YYYY-MM-DD)的字符串:",d_format)#返回格式化的日期字符串类似time模块的strftimed_strftime = d.strftime("%Y-%m-%d %H:%M:%S")print("格式化后的字符串:",d_strftime)#返回时间的元组(struct_time)形式d_tuple = d.timetuple()print("返回时间的元组(struct_time)形式:",d_tuple)'''运行结果data能表示的最大日期: 9999-12-31data能表示的最大日期: 0001-01-01获取当前日期: 2017-07-14获取年2017、月7、日14根据给定的时间戳返回对应的日期: 2360-03-02返回weekday为: 4返回格式化(YYYY-MM-DD)的字符串: 2017-07-14格式化后的字符串: 2017-07-14 00:00:00返回时间的元组(struct_time)形式: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=-1)'''

2.datetime.time的常见用法示例

#!/usr/bin/env python# -*- coding:utf-8 -*-import datetimedt = datetime.time(17,30,00)   #参数时、分、秒#time能表示的最大时间dt_max = dt.maxprint("能表示的最大时间:",dt_max)#time能表示的最小时间dt_min = dt.minprint("能表示的最小时间:",dt_min)#获取时、分、秒、微妙hour = dt.hourminute = dt.minutesecond = dt.secondmicrosecond = dt.microsecondprint("获取时%s、分%s、秒%s、微妙%s"% (hour,minute,second,microsecond))#返回时间的格式化字符串(HH:MM:SS)dt_format = dt.isoformat()print("返回时间的格式化字符串(HH:MM:SS):",dt_format)#格式化,类似于time模块的strftimedt_strftime = dt.strftime("%H:%M:%S")print("格式化:",dt_strftime)'''运行结果能表示的最大时间: 23:59:59.999999能表示的最小时间: 00:00:00获取时17、分30、秒0、微妙0返回时间的格式化字符串(HH:MM:SS): 17:30:00格式化: 17:30:00'''

3.datetime.datetime的常见用法示例

#!/usr/bin/env python# -*- coding:utf-8 -*-import datetime#获得当前的本地时间d_today = datetime.datetime.today()print("获得当前的本地时间:",d_today)#获得当前时间,如果提供了时区参数tz,则根据时区参数获取指定时区的时间d_now = datetime.datetime.now()print("获得当前时间:",d_now)#获取当前的世界标准时间(即格林威治天文时间)d_utc = datetime.datetime.utcnow()print("获取当前的世界标准时间(即格林威治天文时间):",d_utc)#将时间戳转化成格式化的字符串,可以时区参数tz转成指定时区的格式化时间d_fromtimestamp = datetime.datetime.fromtimestamp(123214324)print("将时间戳转化成格式化的字符串:",d_fromtimestamp)#根据时间戳以utc标准时区时间来进行格式化d_utcfromtimestam = datetime.datetime.utcfromtimestamp(123214324)print("将时间戳以utc标准时区时间来转化成格式化的字符串:",d_utcfromtimestam)'''注意通过上边输出结果的比较我们会发现通过fromtimestamp和utcfromtimestamp转化统一时间戳得到的时间正好差了8h'''##################dd = datetime.datetime(2017,7,14,17,30,00)#将指定的时间转化成格式化的字符串,类似于time的strftimedd_strftime = dd.strftime("%Y-%m-%d %H:%M:%S")print("将指定的时间进行格式化",dd_strftime)#返回weekday,如果星期一则返回0,星期二返回1,以此类推,2017-7-14是星期五dd_weekday = dd.weekday()print("返回weekday为:",dd_weekday)#获得元组(struct_time)形式的时间格式dd_timetuple = dd.timetuple()print("获得元组(struct_time)形式的时间格式:",dd_timetuple)#dd_utctimetuple = dd.utctimetuple()  #以utc标准获取#返回一个格式化为%Y-%m-%d %H:%M:%S格式的字符串dd_isoformat = dd.isoformat()print("返回一个格式化为%Y-%m-%d %H:%M:%S格式的字符串:",dd_isoformat)'''运行结果获得当前的本地时间: 2017-07-14 18:57:59.309859获得当前时间: 2017-07-14 18:57:59.309858获取当前的世界标准时间(即格林威治天文时间): 2017-07-14 10:57:59.309858将时间戳转化成格式化的字符串: 1973-11-27 10:12:04将时间戳以utc标准时区时间来转化成格式化的字符串: 1973-11-27 02:12:04将指定的时间进行格式化 2017-07-14 17:30:00返回weekday为: 4获得元组(struct_time)形式的时间格式: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=17, tm_min=30, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=-1)返回一个格式化为%Y-%m-%d %H:%M:%S格式的字符串: 2017-07-14T17:30:00'''

4.datetime.timedelta的常见用法示例

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:Yaosheng Wangimport datetime#获取当前时间now_date = datetime.datetime.now()print("获取当前时间:",now_date)#获取五天后的时间five_later = datetime.datetime.now() + datetime.timedelta(5)print("获取五天后的时间:",five_later)#获取五天前的时间five_ago = datetime.datetime.now() - datetime.timedelta(5)print("获取五天前的时间:",five_ago)#获的三个小时后的时间three_hour_later = datetime.datetime.now() + datetime.timedelta(hours=3)print("获的三个小时后的时间:",three_hour_later)'''运行结果获取当前时间: 2017-07-14 19:00:04.955596获取五天后的时间: 2017-07-19 19:00:04.955596获取五天前的时间: 2017-07-09 19:00:04.955596获的三个小时后的时间: 2017-07-14 22:00:04.955596'''


0