1. 程式人生 > >[Python模組]time與datetime模組的函式說明及使用例項

[Python模組]time與datetime模組的函式說明及使用例項

time模組

模組time包含用於獲取當前時間,操作時間和日期.從字串中讀取日期,將日期格式化為字串的函式.
日期可表示為實數,也可表示為包含9個整數的元組
例如tuple(2018,12,24,12,2,56,-1,-1,-1)
------------------------------------------------------
索引 欄位 值
0-----年-------如1999,2019
1-----月----------1~12
2-----日----------1~31
3-----時----------0~23
4-----分----------0~59
5-----秒----------0~61含閏一秒,閏二秒()
6-----星期-------0~6(0=星期一)
7-----儒略日----1~366
8-----夏令時----0,1,-1
使用-1時,mktime將自動轉換可能正確的值

常用函式的使用

from time import *

new_time=mktime((2018,11,5,10,30,0,-1,-1,-1)) #時間元組->秒
>>>new_time 
1541385000.0
>>>localtime(new_time)  #秒->時間元組
time.struct_time(tm_year=2018, tm_mon=11, tm_mday=5, tm_hour=10, tm_min=30, tm_sec=0, tm_wday=0, tm_yday=309, tm_isdst=0)
>>>asctime(
localtime(new_time)) #時間元組->字串 'Mon Nov 5 10:30:00 2018' >>>strptime('Mon Nov 5 10:30:00 2018') #字串->時間元組 time.struct_time(tm_year=2018, tm_mon=11, tm_mday=5, tm_hour=10, tm_min=30, tm_sec=0, tm_wday=0, tm_yday=309, tm_isdst=-1) >>>time() #當前秒數 1541385068.0643497 >>>asctime(localtime(
time())) #當前時間字串 'Mon Nov 5 10:31:21 2018'

例項:隨機返回指定範圍內的多個日期

import random
from time import *
from pprint import *

start = mktime((2018, 1, 1, 0, 0, 0, -1, -1, -1))
end = mktime((2018, 12, 31, 23, 59, 59, -1, -1, -1))
random_time = []
for i in range(5):
    time_str = asctime(localtime(random.uniform(start, end)))
    random_time.append(time_str)
pprint(random_time)
#輸出
['Wed Aug 29 01:18:44 2018',
 'Sun Sep 16 02:44:16 2018',
 'Sun Dec 30 12:53:29 2018',
 'Wed May  2 04:00:02 2018',
 'Sat Feb 17 03:39:50 2018']
 

datetime模組

datetime模組提供表示和處理日期和時間的一些類.此模組的大部分功能是關於建立和輸出日期與資訊的各種不同方式.其他的主要功能包括數學運算,如時間增量的比較和計算.

date物件

date物件代表由年,月,日組成的簡單日期.

函式使用

from datetime import *

new_date = date(2018, 1, 1)
>>>new_date  #顯示日期
datetime.date(2018, 1, 1)
>>>new_date.today()  #顯示今天日期
datetime.date(2018, 11, 5)
>>>new_date.ctime()  #返回字串,與datetime.time.ctime()格式相同
'Mon Jan  1 00:00:00 2018'
>>>new_date.replace(1999,12) #替換年月日並返回新的日期
datetime.date(1999, 12, 1)
>>>new_date.timetuple() #將date轉換為time模組中的time.struct_time物件
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)
>>>new_date.weekday() #返回一週內的星期 0-6
0
>>>random.uniform(date(2018,1,1),date(2018,12,31)) #隨機返回日期
datetime.date(2018, 6, 25)

time物件

time物件用於表示包含小時,分,秒和微秒的時間.

new_time=time(12,15,20)  #時,分,秒,微秒(microsecond),時區資訊tzinfo()
new_time=time(hour=12,minute=15,second=20)  #或者指定引數
>>>new_time
datetime.time(12, 15, 20)
>>>new_time.isoformat()  #以""HH:MM:SS.mmmmmm""格式輸出字串
'12:15:20'
>>>new_time.replace(second=5) #替換部分值
datetime.time(12, 15, 5)

datetime物件

datetime物件用於表示日期和時間.

>>>datetime.now() #當前時間
datetime.datetime(2018, 11, 5, 11, 18, 18, 49217)
>>>dt = datetime(2018,11,5,11,20,30) #獨立構造
>>>dt
datetime.datetime(2018, 11, 5, 11, 20, 30)
>>>dt=datetime
>>>dt=datetime.combine(date(2018,12,1),time(15,30,30)) #組合構造
datetime.datetime(2018, 12, 1, 15, 30, 30)
>>>dt.date(),dt.time() #獲取date和time
(datetime.date(2018, 12, 1), datetime.time(15, 30, 30))
>>>dt.strftime("%Y-%m-%d %H:%M:%S") #格式化輸出
'2018-12-01 15:30:30'

timedelta物件

timedelta物件表示兩個日期或時間之間的差值.這些物件通常是使用
-運算子計算兩個datetime例項之間的差值時的結果
datetime模組的一個重要特性是:它支援設計日期的數學運算.date和datetime物件(time不支援)都支援以下操作:
td = d1 - d2 返回timedelta物件
d2=d1 ± td 給date新增/減去timedelta
d1 < or <= or == or != or > or >= d2 日期比較

例項:時間倒計時

from datetime import *
from time import sleep


def counter():
    h, m, s = [int(n) for n in input("設定倒計時時間:").split(" ")]
    start = timedelta(hours=h, minutes=m, seconds=s)
    end = timedelta(seconds=0)
    one_sec = timedelta(seconds=1)
    print("開始計時")
    while start > end:
        print(start)
        sleep(1) #睡眠-1s
        start = start - one_sec
    print("計時完畢")
>>>counter()
設定倒計時時間:0 0 5
開始計時
0:00:05
0:00:04
0:00:03
0:00:02
0:00:01
計時完畢

例項:顯示當前時間

def display_now():
    while True:
        sleep(1)
        print(datetime.now().strftime("%H:%M:%S"))
>>display_now()
12:48:11
12:48:12
12:48:13
12:48:14

例項:使用calendar類顯示某月日曆

import calendar
import from pprint import *
>>>pprint(calendar.month(2018, 11))
('   November 2018\n'
 'Mo Tu We Th Fr Sa Su\n'
 '          1  2  3  4\n'
 ' 5  6  7  8  9 10 11\n'
 '12 13 14 15 16 17 18\n'
 '19 20 21 22 23 24 25\n'
 '26 27 28 29 30\n')