Python 程序能用不少方式處理日期和時間,轉換日期格式是一個常見的功能。python
Python 提供了一個 time 和 calendar 模塊能夠用於格式化日期和時間。函數
時間間隔是以秒爲單位的浮點小數。spa
每一個時間戳都以自從1970年1月1日午夜(曆元)通過了多長時間來表示。code
Python 的 time 模塊下有不少函數能夠轉換常見日期格式。如函數time.time()用於獲取當前時間戳blog
>>> import time >>> print(time.time()) 1508312234.7298932 #時間戳單位最適於作日期運算。可是1970年以前的日期就沒法以此表示了。太遙遠的日期也不行,UNIX和Windows只支持到2038年。
不少Python函數用一個元組裝起來的9組數字處理時間ci
字段 | 屬性 | 值 |
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天,不是夏令
能夠根據需求選取各類格式,可是最簡單的獲取可讀的時間模式的函數是asctime()字符串
>>> import time >>> print(time.asctime(time.localtime(time.time()))) Wed Oct 18 16:03:24 2017 #wed爲星期三,oct爲october十月的縮寫,18日,時間,年
能夠使用 time 模塊的 strftime 方法來格式化日期table
python中時間日期格式化符號:class
>>> 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 #完整日期,時間,星期,時區
Calendar模塊有很普遍的方法用來處理年曆和月曆import
>>> import calendar >>> cal=calendar.month(2017,10) >>> print(cal) October 2017 Mo Tu We Th Fr Sa Su 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 #calendar.calendar(2017) #返回一個多行字符串格式的year年年曆,3個月一行,間隔距離爲c。 每日寬度間隔爲w字符。 每行長度爲21* W+18+2* C。l是每星期行數。 >>> c = calendar.calendar(2017) >>> print(c) 2017 January February March Mo 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 19 16 17 18 19 20 21 22 20 21 22 23 24 25 26 20 21 22 23 24 25 26 23 24 25 26 27 28 29 27 28 27 28 29 30 31 30 31 April May June Mo 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 11 10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18 17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25 24 25 26 27 28 29 30 29 30 31 26 27 28 29 30 July August September Mo 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 10 10 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 17 17 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 24 24 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 30 31 October November December Mo 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 17 16 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 24 23 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 31 30 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 2017 Mo Tu We Th Fr Sa Su 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 #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
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() >>> x time.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')
>>> from datetime import datetime >>> print(datetime.now()) 2017-10-23 14:30:48.971017