time和datetime
常用的转换方法:
"2013-10-10 23:40:00" ---> 1381419600.0 In [24]: time.mktime(time.strptime("2013-10-10 23:40:00", "%Y-%m-%d %H:%M:%S"))
Out[24]: 1381419600.0 1381419600---> '2013-10-10 23:40:00' time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(1381419600) ) # "2013-10-10 23:40:00"
在Python中,与时间处理有关的模块包括:time,datetime以及calendar。
通常有这几种方式来表示时间:
1)时间戳
时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
time.time() # 返回当前时间的时间戳
2)格式化的时间字符串
time.asctime # 返回字符串格式的当前时间
'Mon Mar 5 08:40:19 2018'
time.ctime # 返回字符串格式的当前时间
'Mon Mar 5 08:40:54 2018'
3)元组(tuple或struct_time)共九个元素
time.gmtime() # 返回元组格式的当前时间
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=5, tm_hour=0, tm_min=41, tm_sec=16, tm_wday=0, tm_yday=64, tm_isdst=0)
time.localtime() # 返回元组格式的当前时间
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=5, tm_hour=8, tm_min=41, tm_sec=43, tm_wday=0, tm_yday=64, tm_isdst=0)
时间格式转换:
time.localtime(t): #将一个时间戳转换为当前时区的struct_time。
time.localtime(1520210547)
Out[7]: time.struct_time(tm_year=2018, tm_mon=3, tm_mday=5, tm_hour=8, tm_min=42, tm_sec=27, tm_wday=0, tm_yday=64, tm_isdst=0)
time.strptime(t, [format]) #将一个字符串格式化为struct_time
如:t = 'Tue Mar 14 12:10:36 2017' time.strptime(t) # 返回元组格式的时间
time.struct_time(tm_year=2017, tm_mon=3, tm_mday=14, tm_hour=12, tm_min=10, tm_sec=36, tm_wday=1, tm_yday=73, tm_isdst=-1)
time.strptime('Mon Mar 5 08:40:19 2018') time.struct_time(tm_year=2018, tm_mon=3, tm_mday=5, tm_hour=8, tm_min=40, tm_sec=19, tm_wday=0, tm_yday=64, tm_isdst=-1)
time.mktime(t): #将一个struct_time转化为时间戳。
time.mktime(time.strptime('Mon Mar 5 08:40:19 2018', )) 1520210419.0
time.strftime(format,[t]) #将一个struct_time转化为格式化的时间字符串。
如:time.strftime('%Y-%m-%d %H:%M) #无t参,返回指定的字符串格式的当前时间'2017-03-14 12:00'
time.strftime('%m-%b-%Y %H:%M:%S', t) #有t参, 将一个struct_time转化为格式化的时间。
time.strftime('%Y-%m-%d %H:%M') '2018-03-05 08:46'
time.strftime('%Y-%m-%d %H:%M', time.localtime(1520000000)) '2018-03-02 22:13'
通过以上四个方法,可见时间格式的转换,struck_time可以直接和另外两种格式转换,struck_time也可以直接由另外两种格式转换而来。时间戳和字符串格式之间的转换,需要先转换成struck_time,详见示例。
时间戳和格式化的字符串之间的转换:
-
将字符串的时间转换为时间戳 a = "2013-10-10 23:40:00" timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S") # 先将字符串的时间转换为元组 time.mktime(timeArray) # 再将元组转换为时间戳
a = "2013-10-10 23:40:00" timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S") # out: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.mktime(timeArray) # Out[23]: 1381419600.0 "2013-10-10 23:40:00" ---> 1381419600.0 In [24]: time.mktime(time.strptime("2013-10-10 23:40:00", "%Y-%m-%d %H:%M:%S")) Out[24]: 1381419600.0
-
datetime方法:
now = datetime.datetime.now() #这是时间组格式 otherStyleTime = now.strftime("%Y-%m-%d %H:%M:%S")
-
时间戳转换为指定格式日期: timeStamp = 1381419600 timeArray = time.localtime(timeStamp) # 先将时间戳转换为元组 time.strftime("%Y-%m-%d %H:%M:%S", timeArray) # 再将元组转换为字符串 "2013-10-10 23:40:00"
datatime方法也可以: dateArray = datetime.datetime.utcfromtimestamp(timeStamp) # 先将时间戳转换为元组 dateArray.strftime("%Y-%m-%d %H:%M:%S") # 再将元组转换为字符串 "2013-10-10 23:40:00"
In [27]: timeStamp = 1381419600 In [28]: timeArray = time.localtime(timeStamp) In [29]: time.strftime("%Y-%m-%d %H:%M:%S", timeArray) Out[29]: '2013-10-10 23:40:00' 1381419600---> '2013-10-10 23:40:00' time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(t1381419600) )
-
字符串格式更改 a = "2013-10-10 23:40:00",想改为 a = "2013/10/10 23:40:00" #方法:先转换为时间元组,然后转换转换回指定的格式 timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S") otherStyleTime = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)
timeArray = time.strptime(a, "%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_yd otherStyleTime = time.strftime("%Y/%m/%d %H:%M:%S", timeArray) # Out[33]: '2013/10/10 23:40:00'
时间计算:
-
time.localtime()[1] - 1 # 上个月
In [38]: time.localtime() Out[38]: time.struct_time(tm_year=2018, tm_mon=3, tm_mday=5, tm_hour=9, tm_min=8, tm_sec=44, tm_wday=0, tm_yday=64, tm_isdst=0) In [39]: time.localtime()[:] Out[39]: (2018, 3, 5, 9, 8, 48, 0, 64, 0)
-
time.localtime()[7] # 返回今年的第多少天
-
获得三天前的时间: threeDayAgo = (datetime.datetime.now() - datetime.timedelta(days = 3)) #先获得元组的时间 time.mktime(threeDayAgo.timetuple()) #将元组转换为时间戳: threeDayAgo.strftime("%Y-%m-%d %H:%M:%S") 将元组转换为字符串格式: 注:timedelta()的参数有:days,hours,seconds,microseconds
datetime包含了所有date和time的属性
datetime模块定义了下面这几个类: datetime.date:表示日期的类。常用的属性有year, month, day; datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond; datetime.datetime:表示日期时间。 datetime.timedelta:表示时间间隔,即两个时间点之间的长度。 datetime.tzinfo:与时区有关的相关信息。
datetime.date的实例属性: t = datetime.date(2016, 3, 5) t.isoformat() # 返回格式如,'YYYY-MM-DD'的字符串 t.timetuple() # 返回日期对应的time.struct_time对象; t.isoweekday() # 返回星期几
datetime.time的实例属性: t = datetime.time(20,20,20) t.isoformat() # 返回格式如,'YYYY-MM-DD HH:MM:SS'的字符串
datetime.datetime的实例属性: t = datetime.datetime(2016,3,3,12,12,12) t.isoformat() # 返回格式如,'YHH:MM:SS'的字符串
t.strptime(date_string, format):将格式字符串转换为datetime对象;
date,time,datetim用法类似,三者的时间计算和格式转换也类似
-
# 由datetime格式的字符串,返回datetime格式的元组,与time.strptime(t, format)类似
t = '03-Mar-2016 20:20:20'
datetime.datetime.strptime(t,'%m-%b-%Y %H:%M:%S')
-
# 由datetime格式的元组,返回自定义格式的字符串,与time.strftime(format,[t])类似
t = datetime.datetime(2015,3,3,12,12,12)
t.strftime('%m-%b-%Y %H:%M:%S')
-
datetime.datetime.fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象
-
t1 = t + datetime.timedelta(days=3) # 时间计算,间隔参数可以为days,hours,minutes,seconds
posted on 2017-04-10 00:01 myworldworld 阅读(133) 评论(0) 收藏 举报
浙公网安备 33010602011771号