time模块功能接近于操作系统层面。有些函数是平台相关的(如:time.clock()),可能会在不同的平台有不同的效果。基于Unix Timestamp,所以其所能表述的日期范围被限定在 1970 - 2038 之间。需要处理在前面所述范围之外的日期,可能需要考虑使用datetime模块。
time模块中时间表现的格式主要有三种:
struct_time元组属性:
序号 | 属性 | 值 |
---|---|---|
0 | tm_year | 2008 |
1 | tm_mon | 1 到 12 |
2 | tm_mday | 1 到 31 |
3 | tm_hour | 0 到 23 |
4 | tm_min | 0 到 59 |
5 | tm_sec | 0 到 61 (60或61 是闰秒) |
6 | tm_wday | 0到6 (0是周一) |
7 | tm_yday | 1 到 366(儒略历) |
8 | tm_isdst | -1, 0, 1, -1是决定是否为夏令时的旗帜 |
format time结构化表示:
格式 | 含义 |
%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 | 时区的名字(如果不存在为空字符) |
%% | ‘%’字符 |
import time # 获取当地当前,以时间戳格式表现 time.time() # 获取当地当前,以时间元组格式表现 time.localtime() # 本地时间,东八区 time.gmtime() # 格林威治时间,0时区 # 获取当地当前,以时间格式化形式表现 time.ctime() time.asctime() time.strftime("%Y-%m-%d %X")
# Timestamp——>struct_time print("Timestamp——>struct_time:") timestamp_now = time.time() time.localtime(timestamp_now) time.gmtime(timestamp_now) # struct_time——>formating time print("struct_time——>formating time:") structtime_now = time.localtime() time.strftime('%Y',structtime_now) time.strftime("%Y-%m-%d %X",structtime_now) time.asctime(structtime_now) # formating time——>struct_time print("formating time——>struct_time:") formatingtime_now = '2021-06-13 16:37:06' time.strptime(formatingtime_now,"%Y-%m-%d %X") time.strptime("30 Nov 00", "%d %b %y") # struct_time——>Timestamp print("struct_time——>Timestamp:") time.mktime(structtime_now) # Timestamp——>formating time print("Timestamp——>formating time:") time.ctime(timestamp_now)
其他:菜鸟教程
datetime 基于 time 进行了封装,提供了更多实用的函数接口。在datetime 模块中包含了几个类:
实际实用中,用得比较多的是 datetime.datetime 和 datetime.timedelta ,另外两个 datetime.date 和 datetime.time 实际使用和 datetime.datetime 并无太大差别。
from datetime import date import time # 静态方法 date.max # date对象所能表示的最大、最小日期; date.min date.resolution # date对象表示日期的最小单位:天.
# 构造date对象 date.today() # 返回一个表示当前本地日期的date对象 date(2021, 6, 13) # date对象
# date对象常用方法和属性 now_date = date.today() now_date.year # 年、月、日 now_date.month now_date.day now_date.replace(month=7) # 生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原对象仍保持不变) now_date.timetuple() # 返回日期对应的time.struct_time对象 now_date.weekday() # 返回星期几weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;(从0开始) now_date.isoweekday() # 返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;(从1开始) now_date.isoformat() # 返回格式如'YYYY-MM-DD’的字符串; now_date.isocalendar() # 返回格式如(year,month,day)的元组; now_date.strftime(format='%y') # 返回格式化后的字符串,格式和time模块format相同
datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] )
from datetime import time import time # 静态方法 time.max time.min time.resolution # 1微妙
now_time = time(14,9,5,32) # 构造time对象 # 方法和属性 now_time.hour now_time.minute now_time.second now_time.microsecond # 微秒 # now_time.tzinfo # 时区信息 now_time.replace(minute=59) now_time.isoformat() # 返回型如"HH:MM:SS"格式的字符串表示; now_time.strftime(format='%H-%M %S') # 格式化输出
datetime相当于date和time的结合:
datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )
from datetime import datetime import time # 静态方法 datetime.max datetime.min datetime.resolution
# 构造datetime类:可以根据tz参数指定时区 datetime.today() datetime.now() # 可以传入tz参数,获取tz参数所指时区的本地时间 datetime.utcnow() # 格林威治时间,0时区 tz=0 # datetime.fromtimestamp(timestamp[, tz]) 根据时间戮创建一个datetime对象,参数tz指定时区信息; # datetime.utcfromtimestamp(timestamp) 根据时间戮创建一个datetime对象; # datetime.combine(date, time) 根据date和time,创建一个datetime对象; # datetime.strptime(date_string, format) 将格式字符串转换为datetime对象;
# 一些方法和属性 dt_now=datetime.now()#datetime对象 dt_now dt_now.year # dt.year、month、day、hour、minute、second、microsecond、tzinfo dt_now.replace(year=2020,day=9) dt_now.timetuple() # 返回日期对应的time.struct_time对象 dt_now.utctimetuple() dt_now.toordinal() dt_now.weekday() dt_now.isoweekday() dt_now.isocalendar() dt_now.isoformat() dt_now.ctime() dt_now.strftime("%Y %X")
from datetime import datetime from datetime import timedelta dt = datetime.now() # 日期偏移操作 dt tomorrow = dt + timedelta(days=1) # 明天 tomorrow yesterday = dt + timedelta(days=-1) # 昨天 yesterday timedelta_ = tomorrow - yesterday # timedelta对象 timedelta_ timedelta_.days # 时间偏移的天数 timedelta_.total_seconds() # 时间偏移的秒数
from datetime import datetime, tzinfo,timedelta """ tzinfo是关于时区信息的类 tzinfo是一个抽象类,所以不能直接被实例化 """ class UTC(tzinfo): """UTC""" def __init__(self,offset = 0): self._offset = offset def utcoffset(self, dt): return timedelta(hours=self._offset) def tzname(self, dt): return "UTC +%s" % self._offset def dst(self, dt): return timedelta(hours=self._offset) #北京时间 beijing = datetime(2011,11,11,0,0,0,tzinfo = UTC(8)) #曼谷时间 bangkok = datetime(2011,11,11,0,0,0,tzinfo = UTC(7)) #北京时间转成曼谷时间 beijing.astimezone(UTC(7)) #计算时间差时也会考虑时区的问题 timespan = beijing - bangkok