1、python3日期和时间
Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。
时间间隔是以秒为单位的浮点小数。
每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。
Python 的 time 模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳
>>> import time>>> print(time.time())1508312234.7298932#时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年。
2、时间元组
很多Python函数用一个元组装起来的9组数字处理时间
字段 | 属性 | 值 |
4位年数 | tm_year | 2017 |
月 | tm_mon | 1到12 |
日 | tm_mday | 1到31 |
小时 | tm_hour | 0到23 |
分钟 | tm_min | 0到59 |
秒 | tm_sec | 0到61(60或61是润秒) |
一周的第几日 | tm_wday | 0到6(0是周一) |
一年的第几日 | tm_yday | 1到366,一年中的第几天 |
夏令时 | tm_isdst | 是否为夏令时,值为1时是夏令时,值为0时不是夏令时,默认为-1 |
#从返回浮点数的时间辍方式向时间元组转换,只要将浮点数传递给如localtime之类的函数>>> print(time.localtime(time.time()))time.struct_time(tm_year=2017, tm_mon=10, tm_mday=18, tm_hour=15, tm_min=40, tm_sec=59, tm_wday=2, tm_yday=291, tm_isdst=0) #当前时间为:2017年,10月,18日,15时,40分,59秒,星期三,一年中的291天,不是夏令
3、获取格式化的时间
可以根据需求选取各种格式,但是最简单的获取可读的时间模式的函数是asctime()
>>> import time>>> print(time.asctime(time.localtime(time.time())))Wed Oct 18 16:03:24 2017#wed为星期三,oct为october十月的缩写,18日,时间,年
4、格式化日期
可以使用 time 模块的 strftime 方法来格式化日期
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 当前时区的名称
- %% %号本身
>>> import time>>> print(time.strftime('%Y',time.localtime())) #获取完整年份2017>>> print(time.strftime('%y',time.localtime())) #获取简写年份17>>> print(time.strftime('%m',time.localtime())) #获取月10>>> print(time.strftime('%d',time.localtime())) #获取日18>>> print(time.strftime('%Y-%m-%d',time.localtime())) #获取年-月-日2017-10-18>>> print(time.strftime('%H',time.localtime())) #获取时,24小时制16>>> print(time.strftime('%l',time.localtime())) #获取时,12小时制 4>>> print(time.strftime('%M',time.localtime())) #获取分33>>> print(time.strftime('%S',time.localtime())) #获取秒31>>> print(time.strftime('%H:%M:%S',time.localtime())) #获取时:分:秒16:34:28>>> print(time.strftime('%a',time.localtime())) #本地简化星期Wed>>> print(time.strftime('%A',time.localtime())) #本地完整星期Wednesday>>> print(time.strftime('%b',time.localtime())) #本地简化月份Oct>>> print(time.strftime('%B',time.localtime())) #本地完整月份October>>> print(time.strftime('%c',time.localtime())) #本地日期和时间表示Wed Oct 18 16:37:46 2017>>> print(time.strftime('%j',time.localtime())) #一年中的第几天291>>> print(time.strftime('%p',time.localtime())) #P.M等价符PM>>> print(time.strftime('%U',time.localtime())) #一年中的第几个星期,星期天为星期的开始42>>> print(time.strftime('%w',time.localtime())) #星期几,星期天为星期的开始3>>> print(time.strftime('%W',time.localtime())) #一年中的第几个星期,星期一为星期的开始42>>> print(time.strftime('%x',time.localtime())) #本地日期表示10/18/17>>> print(time.strftime('%X',time.localtime())) #本地时间表示17:16:17>>> print(time.strftime('%Z',time.localtime())) #当前时区CST>>> print(time.strftime('%%',time.localtime())) #输出%本身%>>> print(time.strftime('%Y-%m-%d %H:%M:%S %w-%Z',time.localtime())) 2017-10-18 17:25:39 3-CST #完整日期,时间,星期,时区
5、获取月日历
Calendar模块有很广泛的方法用来处理年历和月历
>>> import calendar>>> cal=calendar.month(2017,10)>>> print(cal) October 2017Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516 17 18 19 20 21 2223 24 25 26 27 28 2930 31#calendar.calendar(2017)#返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。>>> c = calendar.calendar(2017)>>> print(c) 2017 January February MarchMo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 1 2 3 4 5 2 3 4 5 6 7 8 6 7 8 9 10 11 12 6 7 8 9 10 11 12 9 10 11 12 13 14 15 13 14 15 16 17 18 19 13 14 15 16 17 18 1916 17 18 19 20 21 22 20 21 22 23 24 25 26 20 21 22 23 24 25 2623 24 25 26 27 28 29 27 28 27 28 29 30 3130 31 April May JuneMo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 1 2 3 4 5 6 7 1 2 3 4 3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 1110 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 1817 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 2524 25 26 27 28 29 30 29 30 31 26 27 28 29 30 July August SeptemberMo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 1 2 3 4 5 6 1 2 3 3 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 8 9 1010 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 1717 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 2424 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 3031 October November DecemberMo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 1 2 3 2 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 8 9 10 9 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 15 16 1716 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 2423 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 3130 31
#calendar.firstweekday返回当前每周起始日期的设置。默认情况下,首次载入calendar模块时返回0,即星期一。>>> calendar.firstweekday()0#calendar.setfirstweekday设置每周的起始日期码。0(星期一)到6(星期日)。>>> calendar.setfirstweekday(1)>>> calendar.firstweekday()1# calendar.isleap是闰年返回True,否则为false。>>> calendar.isleap(2017)False>>> print(calendar.isleap(2020))True#calendar.leapdays返回在两年之间的闰年总数,但不包括末年>>> print(calendar.leapdays(2016,2020))1>>> print(calendar.leapdays(2016,2021))2#calendar.monthcalendar返回一个整数的单层嵌套列表,每个子列表装载代表一个星期,月外的日期设为0>>> print(calendar.monthcalendar(2017,10))[[0, 0, 0, 0, 0, 0, 1], [2, 3, 4, 5, 6, 7, 8], [9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19, 20, 21, 22], [23, 24, 25, 26, 27, 28, 29], [30, 31, 0, 0, 0, 0, 0]]>>> print(calendar.month(2017,10)) October 2017Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516 17 18 19 20 21 2223 24 25 26 27 28 2930 31#calendar.monthrange返回两个整数,第一个为该月的首日的星期(0-6),第二个为该月的总天数>>> print(calendar.monthrange(2017,10))(6, 31)#calendar.timegm接受一个时间元组形式struct_time,返回该时刻的时间辍(1970纪元后经过的浮点秒数)>>> print(calendar.timegm((2017,10,19,14,50,0,0,0,0)))1508424600>>> print(calendar.timegm((2017,10,19,14,50,50,0,0,0)))1508424650>>> print(time.localtime(time.time()))time.struct_time(tm_year=2017, tm_mon=10, tm_mday=19, tm_hour=14, tm_min=49, tm_sec=44, tm_wday=3, tm_yday=292, tm_isdst=0)#calendar.weekday返回给定日期的星期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。>>> print(calendar.weekday(2017,10,19))3>>> print(calendar.weekday(2017,10,20))4
6、Time模块
Time 模块包含了以下内置函数,既有时间处理相的,也有转换时间格式的:
#time.altzone#返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。>>> import time>>> print(time.altzone)-28800#time.asctime([tupletime])#接受时间元组并返回一个可读的形式为"Thu Oct 19 15:07:31 2017"(2017年10月19日 周四15时07分31秒)的24个字符的字符串。>>> print(time.asctime(time.localtime()))Thu Oct 19 15:07:31 2017#time.clock()#用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。>>> import time>>> def procedure():... time.sleep(2.5)... >>> t0 = time.clock()>>> procedure()>>> print(time.clock() - t0)0.010000000000000009>>> print(time.clock() - t0)0.020000000000000004#time.ctime()作用相当于asctime(localtime(secs)),未给参数相当于asctime()>>> import time>>> print(time.ctime())Thu Oct 19 19:24:24 2017>>> print(time.asctime(time.localtime()))Fri Oct 20 11:10:00 2017>>> print(time.asctime())Fri Oct 20 11:10:19 2017#time.gmtime()以元组方式返回格林威治时间>>> print(time.gmtime())time.struct_time(tm_year=2017, tm_mon=10, tm_mday=20, tm_hour=3, tm_min=27, tm_sec=30, tm_wday=4, tm_yday=293, tm_isdst=0)#time.localtime()以元组方式返回本地当前时间>>> print(time.localtime())time.struct_time(tm_year=2017, tm_mon=10, tm_mday=20, tm_hour=11, tm_min=30, tm_sec=33, tm_wday=4, tm_yday=293, tm_isdst=0)#time.mktime()将元组时间转换为时间戳>>> x = time.localtime()>>> xtime.struct_time(tm_year=2017, tm_mon=10, tm_mday=20, tm_hour=11, tm_min=32, tm_sec=8, tm_wday=4, tm_yday=293, tm_isdst=0)>>> time.mktime(x)1508470328.0#time.strftime(fmt[,tupletime])#接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。>>> print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))2017-10-20 17:29:08
#time.strptime()#根据fmt的格式把一个时间字符串解析为时间元组。>>> print(time.strptime('23 Oct 2017','%d %b %Y'))time.struct_time(tm_year=2017, tm_mon=10, tm_mday=23, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=296, tm_isdst=-1)>>> print(time.strptime('23 Oct 2017 14 03 00','%d %b %Y %H %M %S'))time.struct_time(tm_year=2017, tm_mon=10, tm_mday=23, tm_hour=14, tm_min=3, tm_sec=0, tm_wday=0, tm_yday=296, tm_isdst=-1)#time.time#返回当前时间的时间戳(1970年经过的秒数)>>> print(time.time())1508739061.9443805#time.timezone#是当地时区距离格林威治偏移的秒数>>> print(time.timezone)-28800#time.tzname#输出一个包含一个不包含夏令时的本地时区名称>>> print(time.tzname)('CST', 'CST')
7、datetime模块
>>> from datetime import datetime>>> print(datetime.now())2017-10-23 14:30:48.971017
标签:
2
0
上一篇: 下一篇: