python针对时间的处理非常的丰富和灵活,下面是整理总结的一些常用的方法:

我们经常涉及的转换对象包括string字符串、timestamp时间戳、timedatetime

获取时间变量

获取当前时间

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 当前时区的名称
%% %号本身