天天看點

标準庫子產品time,datetime

在Python中,通常有這幾種方式來表示時間:

1)時間戳

2)格式化的時間字元串

3)元組(struct_time)共九個元素。

由于Python的time子產品實作主要調用C庫,是以各個平台可能有所不同。

1)時間戳timestamp

時間戳(timestamp)的方式:

  通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們運作“type(time.time())”,傳回的是float類型。傳回時間戳方式的函數主要有time(),clock()等。

import time

time.time()    #時間戳,傳回目前時間,浮點數的小數
Out[2]: 1499043080.1035373

help(time.time)
Help on built-in function time in module time:

time(...)
    time() -> floating point number
    
    Return the current time in seconds since the Epoch. #傳回從1970年1月1日0時起到目前時間的秒數。
    Fractions of a second may be present if the system clock provides them.
      

 

2)格式化的時間字元串

完全按照自定義的格式顯示的時間為格式化的時間字元串。

3)元組(struct_time)共九個元素。

time.localtime()
Out[4]: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=3, tm_hour=9, tm_min=15, tm_sec=29, tm_wday=0, tm_yday=184, tm_isdst=0)
      

九個元素: 年,月,日,時,分,秒,一周中的第幾天(tm_wday),一年中的第幾天(tm_yday),是否為夏時令(tm_isdst).

UTC(Coordinated Universal Time,世界協調時)亦即格林威治天文時間,世界标準時間。在中國為UTC+8。DST(Daylight Saving Time)即夏令時。

格林尼治标準時間(舊譯格林尼治平均時間或格林威治标準時間;英語:Greenwich Mean Time,GMT)
是指位于英國倫敦郊區的皇家格林尼治天文台的标準時間,因為本初子午線被定義在通過那裡的經線。
自1924年2月5日開始,格林尼治天文台每隔一小時會向全世界發放調時資訊。


      

子產品time中的函數:

time() -- return current time in seconds since the Epoch as a float  傳回從1970年1月1日0時0分0秒到目前時間的是秒數

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  将時間轉換為utc标準時間元組,如無傳入時間戳,預設傳入目前時間

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,datetime

執行個體:

import time

time.time()    #return current time in seconds since the Epoch as a float
Out[17]: 1499062437.660978

time.gmtime()   #convert seconds since Epoch to UTC tuple
Out[18]: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=3, tm_hour=6, tm_min=14, tm_sec=14, tm_wday=0, tm_yday=184, tm_isdst=0)

time.localtime()   #convert seconds since Epoch to local time tuple
Out[19]: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=3, tm_hour=14, tm_min=14, tm_sec=36, tm_wday=0, tm_yday=184, tm_isdst=0)

time.localtime().tm_hour-time.gmtime().tm_hour  #東八區的時間比utc标準時間快了8小時
Out[20]: 8

time.mktime(time.localtime())  #将struct_time轉換為時間戳
Out[21]: 1499062548.0


x=time.localtime()   #本地時間的struct_time

time.strftime(\'%Y-%m\',x)  #struct_time轉換為格式化的字元串時間
Out[23]: \'2017-07\' #strftime(\'格式%Y-%m-%d\',struct_time)---->’格式化的字元串2017-07-03‘

time.strptime(\'2017-07-03\',\'%Y-%m-%d\')   #将格式化的字元串時間轉化為struct_time
Out[24]: time.struct_time(tm_year=2017, tm_mon=7, tm_mday=3, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=184, tm_isdst=-1)
 #strptime(\'格式化的字元串%Y-%m-%d\',\'格式2017-07-03\')-->\'struct_time\'(tuple)      
标準庫子產品time,datetime

 asctime() -- convert time tuple to string 将時間元組轉化為字元串格式

ctime() -- convert time in seconds to string  将時間戳轉化為字元串格式

time.asctime(time.localtime())
Out[27]: \'Mon Jul  3 15:50:01 2017\'

time.ctime(time.time())
Out[28]: \'Mon Jul  3 15:50:10 2017\'
      

  

格式參照:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

%

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

星期天是一個星期的開始。)第一個星期天之前的所有天數都放在第

周。    三    

%

w    一個星期中的第幾天(

-

6

是星期天)    三    

%

W    和

%

U基本相同,不同的是

%

W以星期一為一個星期的開始。    

%

x    本地相應日期    

%

X    本地相應時間    

%

y    去掉世紀的年份(

00

-

99

)    

%

Y    完整的年份    

%

Z    時區的名字(如果不存在為空字元)    

%

%

%

’字元

子產品datetime是對datetime類型的快速實作。

子產品datetime中有類date,datetime,time,datedelta,tzinfo,timezone。

标準庫子產品time,datetime

類date的日期對象為:年,月,日;類time的時間對象為:時,分,秒,微秒,時區;類datetime的日期時間對象是:年,月,日,時,分,秒,微秒,時區。

标準庫子產品time,datetime
标準庫子產品time,datetime
标準庫子產品time,datetime

datetime:

import datetime

datetime.datetime.now() #擷取目前時間
Out[33]: datetime.datetime(2017, 7, 3, 15, 57, 26, 184085)

datetime.datetime.now()+datetime.timedelta(3)  #目前時間+3天
Out[35]: datetime.datetime(2017, 7, 6, 15, 58, 47, 949762)

datetime.datetime.now()+datetime.timedelta(hours=3)  #目前時間+3小時
Out[36]: datetime.datetime(2017, 7, 3, 18, 59, 15, 221322)

datetime.datetime.now()+datetime.timedelta(minutes=3)  #目前時間+3分鐘
Out[37]: datetime.datetime(2017, 7, 3, 16, 2, 45, 578058)      

我們先看如何擷取目前日期和時間:

>>> from datetime import datetime
>>> now = datetime.now() # 擷取目前datetime
>>> print(now)
2015-05-18 16:28:07.198690
>>> print(type(now))
<class \'datetime.datetime\'>
           

注意到

datetime

是子產品,

datetime

子產品還包含一個

datetime

類,通過

from datetime import datetime

導入的才是

datetime

這個類。

如果僅導入

import datetime

,則必須引用全名

datetime.datetime

datetime.now()

傳回目前日期和時間,其類型是

datetime

datetime轉換為str

如果已經有了datetime對象,要把它格式化為字元串顯示給使用者,就需要轉換為str,轉換方法是通過

strftime()

實作的,同樣需要一個日期和時間的格式化字元串:

>>> from datetime import datetime
>>> now = datetime.now()
>>> print(now.strftime(\'%a, %b %d %H:%M\'))
Mon, May 05 16:28
           

datetime加減

對日期和時間進行加減實際上就是把datetime往後或往前計算,得到新的datetime。加減可以直接用

+

-

運算符,不過需要導入

timedelta

這個類:

>>> from datetime import datetime, timedelta
>>> now = datetime.now()
>>> now
datetime.datetime(2015, 5, 18, 16, 57, 3, 540997)
>>> now + timedelta(hours=10)
datetime.datetime(2015, 5, 19, 2, 57, 3, 540997)
>>> now - timedelta(days=1)
datetime.datetime(2015, 5, 17, 16, 57, 3, 540997)
>>> now + timedelta(days=2, hours=12)
datetime.datetime(2015, 5, 21, 4, 57, 3, 540997)
           

可見,使用

timedelta

你可以很容易地算出前幾天和後幾天的時刻。

标準庫子產品time,datetime