python成长之路【第六篇】:python模块--time和datetime
1、时间表现形式
时间戳 (1970年1月1日之后的秒,即:time.time())
格式化的时间字符串 (2014-11-11 11:11, 即:time.strftime('%Y-%m-%d'))
元组((struct_time)共九个元素 (元组包含了:年、日、星期等... time.struct_time 即:time.localtime())
注意:时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。返回时间戳方式的函数主要有time(),clock()等。
元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。
UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。
2、time模块方法:help(time.time)
time.time() #获取时间戳,从1970-1-1 0:0:0到现在的秒数 time.sleep(2) #暂停2秒 time.gmtime() #时间戳转换为UTC时间,表现为元组形式 time.localtime() #时间戳转换为本地时间,表现为元组形式 time.mktime() #将元组形式的时间转换为时间戳 time.strftime("%Y-%m-%d %H:%M:%S",[,tuple]) #将元组形式的时间转化为格式化的字符串 %Y == x.tm_year time.strptime("2016-08-20 14:44:00","%Y-%m-%d %H:%M:%S") #将格式化的字符串转换为元组形式的时间 time.asctime() #将元组形式的时间转换为格式化的字符串 time.ctime() #将时间戳转换为格式化的字符串
转成元组(struct_time)形式:
#时间戳转换为元组形式的时间,如果()中没有值,则将当前时间戳转换为元组形式
print(time.localtime())
输出:
time.struct_time(tm_year=2016, tm_mon=8, tm_mday=21, tm_hour=17, tm_min=11, tm_sec=52, tm_wday=6, tm_yday=234, tm_isdst=0)
#日期字符串转成元组形式的时间
string_2_struct = time.strptime("2016/08/21","%Y/%m/%d")
print(string_2_struct)
输出:
time.struct_time(tm_year=2016, tm_mon=8, tm_mday=21, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=234, tm_isdst=-1)
注意:其实%Y == string_2_struct.tm_year,其他类似,这样我们也可以输出格式化后的字符串时间格式。
print("{year}-{month}-{day}".format(year=string_2_struct.tm_year,month=string_2_struct.tm_mon,day=string_2_struct.tm_mday))
转换成时间戳:
#将元组形式的时间转换成时间戳
print(time.mktime(time.localtime()))
输出:
1471771439.0
转换为时间的字符串格式:
#将元组形式的时间转换成字符串格式的时间,格式可自定义。
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
输出:
2016-08-21 17:28:03
#将元组形式的时间转换为字符串格式的时间,返回时间格式:"Sun Aug 21 17:39:17 2016"
print(time.asctime(time.localtime()))
输出:
Sun Aug 21 17:39:17 2016
#将时间戳转换为字符串格式的时间,返回时间格式:"Sun Aug 21 17:39:17 2016"
print(time.ctime())
输出:
Sun Aug 21 17:39:17 2016
字符串格式参照: %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 时区的名字(如果不存在为空字符) %% ‘%’字符
各个时间表现形式之间的逻辑图,如下:
3、时间模块datetime
import datetime print(datetime.datetime.now()) #返回 2016-08-21 17:48:55.171126 print(datetime.date.fromtimestamp(time.time())) #返回2016-08-21 print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天 print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天 print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时 print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分钟
#时间替换
c_time = datetime.datetime.now()
print(c_time.replace(hour=2,minute=3)) #将c_time中的hour替换为2
输出:
2016-08-21 02:03:30.526171