1. 程式人生 > >Python與時間相關的time、datetime模塊的使用

Python與時間相關的time、datetime模塊的使用

Oday cpu lock 學習 pytho cloc convert timezone image

一、前言

學習python處理時間相關的模塊time、datetime

二、time模塊

首先來看下time模塊

通過help(time)來看一下time模塊下都有哪些函數:

    time() -- return current time in seconds since the Epoch as a float
    clock() -- return CPU time since process start as a float
    sleep() -- delay for a number of seconds given as a float
    gmtime() -- convert seconds since Epoch to UTC tuple
    localtime() -- convert seconds since Epoch to local time tuple
    asctime() -- convert time tuple to string
    ctime() -- convert time in seconds to string
    mktime() -- convert local time tuple to seconds since Epoch
    strftime() -- convert time tuple to string according to format specification
    strptime() -- parse string to time tuple according to format specification
    tzset() -- change the local timezone

time表現方式有三種:

1、時間戳(timestamp)的方式:時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。返回的是float類型,返回時間戳的函數有time()、clock()

2、元組(struct_time)方式:struct_time元組共有9個元素,返回struct_time的函數主要有gmtime(),localtime(),strptime()。下面列出這種方式元組中的幾個元素:

技術分享圖片

3、格式化字符串(format time)方式:格式化時間,已格式化的結構使時間更具可讀性。包括自定義格式和固定格式。比如“2018-5-11”

下面就說一下常用的一些函數:

1、time.sleep()

time.sleep(secs):線程推遲指定的時間運行。單位為秒。

2、time.time()

獲取當前時間戳

>>>time.time()      
1525954582.579378
3、time.clock()

計算cpu計算所執行的時間

>>>time.sleep(3)
print(time.clock())
0.061649
4、time.gmtime()
>>>a=time.gmtime
print(a)
time.struct_time(tm_year=2018, tm_mon=5, tm_mday=10, tm_hour=6, tm_min=53, tm_sec=30, tm_wday=3, tm_yday=130, tm_isdst=0)

gmtime()方法是將一個時間戳轉換為UTC時區(0時區)的struct_time。,總共9個參數,其含義如上面那個表格圖所示

5、time.localtime()
>>>a=time.localtime()
print(a)
time.struct_time(tm_year=2018, tm_mon=5, tm_mday=11, tm_hour=9, tm_min=22, tm_sec=14, tm_wday=4, tm_yday=131, tm_isdst=0)

將一個時間戳轉換為當前時區的struct_time。secs參數未提供,則以當前時間為準。,總共9個參數,其含義如上面那個表格圖所示

6、time.asctime([t]):

把一個表示時間的元組或者struct_time表示為這種形式:‘Sun Jun 20 23:21:05 1993‘。如果沒有參數,將會將time.localtime()作為參數傳入。

>>>time.asctime()
‘Thu May 5 14:55:43 2011‘

將一個時間戳轉換為當前時區的struct_time。secs參數未提供,則以當前時間為準。,總共9個參數,其含義如上面那個表格圖所示

7、time.ctime()
>>>time.ctime(3600)
print(a)
Thu Jan  1 09:00:00 1970

將時間戳轉為這個形式的‘Sun Jun 20 23:21:05 1993‘格式化時間。如果沒有參數,將會將time.localtime()作為參數傳入。

8、time.strftime(format[, t])
>>>local_time = time.localtime()
print(time.strftime(‘%Y-%m-%d  %H:%M:%S‘, local_time))
2018-05-11  09:38:46

把一個代表時間的元組或者struct_time(如由time.localtime()和time.gmtime()返回)轉化為格式化的時間字符串。如果t未指定,將傳入time.localtime()。如果元組中任何一個元素越界,ValueError的錯誤將會被拋出。

9、time.strptime(string[, format])
>>>a=time.localtime()
print(a)
time.struct_time(tm_year=2018, tm_mon=5, tm_mday=11, tm_hour=9, tm_min=22, tm_sec=14, tm_wday=4, tm_yday=131, tm_isdst=0)

把一個格式化時間字符串轉化為struct_time。實際上它和strftime()是逆操作。在這個函數中,format默認為:"%a %b %d %H:%M:%S %Y"。

他們之間轉換關系如下圖:

技術分享圖片

時間格式化:

%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 當前時區的名稱
%% %號本身

三、datetime模塊

datetime內置對象關系如下:
技術分享圖片
分為date/time/timedelta/tzinfo 四個類,其中date、tzinfo又分別有各自的子類datetim/timezone

1、datetime.datetime.now() 獲取當前時間字符串
>>>datetime.datetime.now()
2018-05-11 10:05:29.397237
2、datetime.datetime.now().timestamp() 獲取當前時間時間戳
>>>datetime.datetime.now().timestamp()
1526004460.797517
3、datetime.datetime.today() 獲取當前時間年月日
>>>datetime.datetime.today()
2018-05-11
4、其他一些方法
In [42]: #設置一個時間對象

In [43]: d=datetime(2016,7,21,22,23,15)

In [44]: #自定義格式顯示

In [45]: d.strftime(‘%x %X‘)
Out[45]: ‘07/21/16 22:23:15‘

In [46]: #顯示英文格式

In [47]: d.ctime()
Out[47]: ‘Thu Jul 21 22:23:15 2016‘

In [48]: #顯示日歷(年,年中第幾周,周幾)

In [49]: d.isocalendar()
Out[49]: (2016, 29, 4)

datetime子模塊單位時間間隔:datetime.resolution=1微秒。

date子模塊的時間間隔為1天 date.resolution=1天

時間間隔乘以一個數,表示間隔幾天

>>>from datetime import date

#現在時間是

date.today()
datetime.date(2018, 5, 11)

#100天以前的日期是

result=date.today()-date.resolution*100
print(result)

輸出結果:2018-01-31

Python與時間相關的time、datetime模塊的使用