在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 更改本地時間時區

執行個體:
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)
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 | |
子產品datetime是對datetime類型的快速實作。
子產品datetime中有類date,datetime,time,datedelta,tzinfo,timezone。
類date的日期對象為:年,月,日;類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
你可以很容易地算出前幾天和後幾天的時刻。