1. 程式人生 > >python3>日期和時間

python3>日期和時間

rst 如果 apr oca 回到頂部 ngx align 第幾天 .cn

閱讀目錄

  • 1、python3日期和時間
  • 2、時間元組
  • 3、獲取格式化的時間
  • 4、格式化日期
  • 5、獲取月日歷
  • 6、Time模塊
  • 7、datetime模塊
回到頂部

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 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
技術分享圖片 回到頂部

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()
>>> 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‘)
技術分享圖片 回到頂部

7、datetime模塊

>>> from datetime import datetime
>>> print(datetime.now())
2017-10-23 14:30:48.971017

python3>日期和時間