time 模块中处理时间数据格式的几种方式
在 time 模块中,时间数据主要有三种格式:时间戳(timeStamp)、时间数组(timeStruct)和时间字符串(timeStr)。形式如下图所示:
对于这三种格式的数据,时间戳与时间数组之间可以互相转换,时间数组和时间字符串之间可以互相转换,于是以时间数组为媒介,时间戳与时间字符串之间也可以互相转换。下面对这些转换进行具体说明。
1. 基本方法
timeStamp = time.time() # 获取当前时间的时间戳
timeStruct = time.localtime() # 获取当前时间的时间数组
timeStamp = time.mktime(timeStruct) # 时间数组转为时间戳
timeStruct = time.localtime(timeStamp) # 时间戳转为时间数组
timeStr = time.asctime(timeStruct) # 时间数组转为英文格式的时间字符串
timeStr = time.strftime("%Y-%m-%d",timeStruct) # 时间数组转为其它指定格式的时间字符串 (time from str)
timeStruct = time.strptime(timeStr,"%Y-%m-%d") # 时间字符串转为时间数组 (str parse to time)
为了方便记忆,strftime()
可以理解为 “time from str”,strptime()
可以理解为 “str parsed to time”。
2. 常用的时间日期格式化符号
%y # 两位数的年份表示(00-99)
%Y # 四位数的年份表示(000-9999)
%m # 月份(01-12)
%d # 月内中的一天(0-31)
%H # 24小时制小时数(0-23)
%I # 12小时制小时数(01-12)
%M # 分钟数(00=59)
%S # 秒(00-59)
3. 三种格式间的相互转换
import time
# 1. 时间字符串1->时间数组1->时间戳->时间数组2->时间字符串2
timeStr1 = '2018-11-29' # 时间字符串1
timeStruct1 = time.strptime(t, "%Y-%m-%d %H:%M:%S") # 时间数组1,由时间字符串1转换得到
timeStamp = time.mktime(timeStruct1) # 时间数组转为时间戳
timeStruct2 = time.localtime(timeStamp) # 时间数组2,由时间戳转换得到
timeStr2 = time.strftime("%Y/%m/%d",timeStruct2) # 另一格式的时间字符串,由时间数组2转换得到
# 2. 时间戳1->时间数组1->时间字符串->时间数组2->时间戳2
timeStamp1 = 1543461759 # 时间戳1
timeStruct1 = time.localtime(timeStamp1) # 时间数组1,由时间戳转换得到
timeStr = time.strftime("%Y-%m-%d %H:%M:%S", timeStruct1) # 指定格式的时间字符串,由时间数组转换得到
timeStruct2 = time.strptime(timeStr,"%Y-%m-%d") # 时间数组2,由时间字符串转换得到
timeStamp2 = time.mktime(timeStruct2) # 时间戳2,由时间数组转换得到
4. 时间字符串的格式化
在我们的日常工作中经常会遇到时间字符串,这就涉及到时间字符串的格式化问题。下面给出时间字符串 '2018-11-29'
到 '2018/11/29'
的转换方法:
import time
timeStr = '2018-11-29'
timeStruct = time.strptime('2018-11-29', "%Y-%m-%d")
timeStr = time.strftime("%Y/%m/%d", timeStruct)
结果为:
需要注意的是,在timeStruct = time.strptime('2018-11-29', "%Y-%m-%d")
这行代码中,参数"%Y-%m-%d"
需要根据'2018-11-29'
的格式来定,如果时间字符串的格式为'2018/11/29'
,那么这个参数应该改为"%Y/%m/%d"
。