python针对时间的处理非常的丰富和灵活,下面是整理总结的一些常用的方法:
我们经常涉及的转换对象包括string
字符串、timestamp
时间戳、time
、datetime
获取时间变量
获取当前时间
datetime
import datetime
# 获取当前时间,格式为时间数组
now = datetime.datetime.now()
# 转换为字符串
string = now.strftime("%Y-%m-%d %H:%M:%S")
对应输出结果如下
>>> now
datetime.datetime(2019, 1, 14, 20, 50, 23, 231000)
>>> string
'2019-01-14 20:50:23'
time
import time
# 获取当前时间,这是时间戳
timeStamp = int(time.time())
# 转换为time.struct_time
timeArray = time.localtime(timeStamp)
# 转换为其他日期格式,如:"%Y-%m-%d %H:%M:%S"
string = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
对应输出结果如下
>>> timeStamp
1547470120
>>> timeArray
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=14, tm_hour=20, tm_min=48, tm_sec=40, tm_wday=0, tm_yday=14, tm_isdst=0)
>>> string
'2019-01-14 20:48:40'
获得三天前的时间
import time
import datetime
# 先获得时间数组格式的日期
threeDayAgo = (datetime.datetime.now() - datetime.timedelta(days = 3))
# 转换为时间戳:
timeStamp = int(time.mktime(threeDayAgo.timetuple()))
# 转换为其他字符串格式:
timeString = threeDayAgo.strftime("%Y-%m-%d %H:%M:%S")
注: timedelta()
的参数有:days,hours,seconds,microseconds
时间变量之间的转换
string -> time.struct_time
string是指定的格式,通过strptime
函数转换为time格式
import time
timeString = "2013-10-10 23:40:00"
timeArray = time.strptime(string, "%Y-%m-%d %H:%M:%S")
输出结果:
time.struct_time(tm_year=2013, tm_mon=10, tm_mday=10, tm_hour=23, tm_min=40, tm_sec=0, tm_wday=3, tm_yday=283, tm_isdst=-1)
time.struct_time -> string
timeArray = time.localtime(time.time())
timeString = time.strftime("%Y/%m/%d %H:%M:%S", t)
t返回当前时间
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=14, tm_hour=20, tm_min=32, tm_sec=23, tm_wday=0, tm_yday=14, tm_isdst=0)
timeString结果为
'2019/01/14 20:33:50'
time -> datetime
import datetime
dateArray = datetime.datetime(* t[:6])
print dateArray
type(dateArray)
<type 'datetime.datetime'>
输出: datetime.datetime(2013, 10, 10, 23, 40)
time -> timestamp
timeStamp = int(time.mktime(t))
输出结果
timeStamp = 1381419600
datetime -> string
dateArray.strftime("%Y-%m-%d %H:%M:%S")
string -> timestamp
string -> time -> timestamp
timestamp -> string
方法一: 利用localtime()
转换为时间数组,然后格式化为需要的格式,如
路径: timestamp -> time.struct_time -> string
timeStamp = 1381419600
timeArray = time.localtime(timeStamp)
timeString = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
输出结果
timeString = "2013-10-10 23:40:00"
方法二:
路径: timestamp -> datetime.datetime -> string
import datetime
timeStamp = 1381419600
dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
timeString = dateArray.strftime("%Y-%m-%d %H:%M:%S")
输出结果
timeString = "2013-10-10 23:40:00"
字符串格式更改
如 a = "2013-10-10 23:40:00",想改为 a = "2013/10/10 23:40:00"
方法: 先转换为时间数组,然后转换为其他格式
路径:string -> datetime.datetime -> string
timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S")
timeString = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)
给定时间戳,计算该时间的几天前时间
import datetime
import time
timeStamp = 1381419600
# 先转换为datetime
dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
threeDayAgo = dateArray - datetime.timedelta(days = 3)
整个转换过程图示如下:
datetime.strftime参数
strftime(format[, tuple]) -> string
下面是格式化符号汇总
%a 星期几的简写 Weekday name, abbr.
%A 星期几的全称 Weekday name, full
%b 月分的简写 Month name, abbr.
%B 月份的全称 Month name, full
%c 标准的日期的时间串 Complete date and time representation
%d 十进制表示的每月的第几天 Day of the month
%H 24小时制的小时 Hour (24-hour clock)
%I 12小时制的小时 Hour (12-hour clock)
%j 十进制表示的每年的第几天 Day of the year
%m 十进制表示的月份 Month number
%M 十时制表示的分钟数 Minute number
%S 十进制的秒数 Second number
%U 第年的第几周,把星期日做为第一天(值从0到53)Week number (Sunday first weekday)
%w 十进制表示的星期几(值从0到6,星期天为0)weekday number
%W 每年的第几周,把星期一做为第一天(值从0到53) Week number (Monday first weekday)
%x 标准的日期串 Complete date representation (e.g. 13/01/08)
%X 标准的时间串 Complete time representation (e.g. 17:02:10)
%y 不带世纪的十进制年份(值从0到99)Year number within century
%Y 带世纪部分的十制年份 Year number
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。Name of time zone
%% 百分号
time.strftime参数
strftime(format[, tuple]) -> string
将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出
python中时间日期格式化符号:
%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)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身