Python基礎(chǔ)學習筆記(六)日期與時間

本節(jié)知識大綱:


圖片.png

一芙代、時間日期基本介紹

時間日期類型在Python中主要有兩個模塊:time模塊和datetime模塊
time模塊:是基于Unix Timestamp(時間戳)實現(xiàn)的康聂,所能表述的范圍被限定在1970-2038年之間知残;
時間戳:是指格林尼治時間1970年01月01日00時00分00秒起至現(xiàn)在的總秒數(shù)都毒,結(jié)果是一個浮點數(shù)评凝。

二坯钦、時間日期類型--time模塊

1. 獲取當前時間戳
print(time.time())

案例:
獲取一個程序執(zhí)行了多少秒

import time
start_time = time.time()
sum = 0
for i in range(1000000):
    sum += i
end_time = time.time()
print("程序執(zhí)行了%f秒"%(end_time - start_time))

輸出結(jié)果:

程序執(zhí)行了0.128733秒
2. 將時間戳轉(zhuǎn)化為標準時間日期格式

如何將一個浮點數(shù)時間戳轉(zhuǎn)為標準時間日期格式
通過時間元組進行轉(zhuǎn)換,使用time.localtime(時間戳)把獲取的時間戳轉(zhuǎn)為當?shù)氐臅r間元組益咬,使用time.gmtime(時間戳)把獲取的時間戳轉(zhuǎn)為格林尼治時間元組逮诲;如果不加參數(shù),默認為當前時間戳。

import time
time_tuple = time.localtime(time.time())
print("當前時間為{}年{}月{}日{(diào)}點{}分{}秒".format(time_tuple[0],time_tuple[1],time_tuple[2],time_tuple[3],time_tuple[4],time_tuple[5]))
3. 格式化時間

(1)以(RPC)標準時間格式輸出時間

time.asctime(time.localtime())  # 參數(shù)為時間元組
time.ctime(time.time())  # 參數(shù)為浮點數(shù)時間戳

輸出結(jié)果:Thu Jun 25 10:31:48 2020

(2)以time.strftime()格式化時間

# 格式化成2020-06-25 11:18:29形式
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
# 格式化成Thu Jun 25 11:18:29 2020形式
print(time.strftime("%a %b %d %H:%M:%S %Y",time.localtime()))

注意:strftime語句中時間格式化符號中是不能包含中文的汛骂,如果想輸出中文罕模,還是通過上面%語句輸出或者format格式輸出。

Python時間格式化符號:


圖片.png
4. 將時間元組轉(zhuǎn)化為時間戳

可以使用time.mktime()方法將時間元組轉(zhuǎn)化為時間戳帘瞭。我們可以自定義時間元祖淑掌,但是必須要填入9個參數(shù),比如2008年8月8日蝶念,晚上8點8分8秒的時間元組為(2008,8,8,20,8,8,0,0,0)未知的參數(shù)可以使用0代替抛腕。

5. 讓程序暫停運行

time.sleep(秒數(shù))可以讓程序運行指定秒數(shù)。

三媒殉、time模塊案例演示

案例:
2008年8月8日担敌,20:08:08往后88,888,888秒是哪天?星期幾廷蓉?

import time
# time.mktime()方法可以把時間元組轉(zhuǎn)為時間戳
tuple01 = (2008,8,8,20,8,8,0,0,0)
# 待求時間戳
time01 = time.mktime(tuple01) + 88888888
# 待求時間元組
tuple02 = time.localtime(time01)
# 打印結(jié)果
print("結(jié)果:",time.strftime("%Y-%m-%d %H:%M:%S",tuple02),end="\t")
tuple_week = ("星期一","星期二","星期三","星期四","星期五","星期六","星期天")
print(tuple_week[tuple02[6]])

輸出結(jié)果:

結(jié)果: 2011-06-03 15:29:36 星期五

四全封、datetime模塊基本使用

datetime模塊:
比time模塊功能更加強大,主要可以使用下面五個類:


圖片.png
1. date類

獲取今天的日期

date01 = datetime.date.today()

返回的結(jié)果是2020-06-26
可以對年桃犬、月刹悴、日各個屬性單獨訪問:

print("年份",date01.year)
print("月份",date01.month)
print("日期",date01.day)
2. time類

time類可以直接定義當前的時間,精確到微秒

time01 = datetime.time(8,23,2,121212)

可以對時攒暇、分土匀、秒、微秒各個屬性單獨訪問:

print("時",time01.hour)
print("分",time01.minute)
print("秒",time01.second)
print("微秒",time01.microsecond)
3. datetime類

獲取日期和時間(年份形用、月份就轧、日期、時
分田度、秒妒御、微秒、時區(qū))

datetime01 = datetime.datetime.now()
4. 三種類型的轉(zhuǎn)換

(1)datetime中去date

datetime01.date()

(2)datetime中取time

datetime01.time()

(3)date和time組合成datetime

datetime.datetime.combine(date01,time01)
5. timeDelta時間差

計算兩個指定日期之間的天數(shù)

date01 = datetime.date(2020,6,26)
date02 = datetime.date(2016,11,23)
print((date01-date02).days)  

五镇饺、import關(guān)鍵字

import關(guān)鍵字表示引入外部某一個功能模塊

1. 引入模塊

引用整個模塊:import <模塊名>携丁,表示我們需要引入整個datetime模塊,包含了該模塊下的所有類兰怠。當我們要調(diào)用某一個類時必須要攜帶模塊名

import datetime
print(datetime.datetime.now())
2. 引入模塊中的指定類

如果引入模塊中的部分類:from <模塊名> import <類名>,當我們要調(diào)用該類時不需要聲名模塊名

from datetime import datetime
print(datetime.now())
3. 引入模塊中的多個類

如果要引用模塊中的多個類可以用逗號隔開李茫,比如

from datetime import date,time,timedelta

我們也可以使用

from datetime import *

雖然是引入了模塊下的所有類揭保,但是實際函數(shù)調(diào)用的時候也是無需加上模塊名也可以直接調(diào)用的

from datetime import *
print(datetime.now())

六、datetime基本使用

1. 獲取當前時間
from datetime import datetime
print(datetime.now())   # 獲取當前日期時間
print(datetime.today()) # 獲取當前時間
print(datetime.utcnow())    # 獲取當前的格林尼治時間

輸出結(jié)果:

2020-06-26 16:35:43.928699
2020-06-26 16:35:43.928732
2020-06-26 08:35:43.928741
2. 獲取當前日期時間的日期和時間
from datetime import datetime
dt01 = datetime.today()
print(dt01.date())
print(dt01.time())

輸出結(jié)果:

2020-06-26
16:35:43.929583
3. 獲取日期時間的年魄宏、月秸侣、日、時、分味榛、秒椭坚、微秒
from datetime import datetime
dt01 = datetime.today()
print(dt01.year)
print(dt01.month)
print(dt01.day)
print(dt01.hour)
print(dt01.minute)
print(dt01.second)
print(dt01.microsecond)

輸出結(jié)果:

2020
6
26
16
35
43
929583
4. 構(gòu)造一個datetime
from datetime import datetime
dt01 = datetime(2008,8,8,20,8,8,888888)
print(dt01)

輸出結(jié)果:

2008-08-08 20:08:08.888888
5. RPC方式格式化時間--ctime
from datetime import datetime
dt01 = datetime.today()
print(dt01.ctime())

輸出結(jié)果:

Fri Jun 26 16:38:35 2020
6. 自定義方式格式化
# 時間格式化符號方式
from datetime import datetime
dt01 = datetime.today()
print(dt01.strftime("%Y-%m-%d %H:%M:%S"))

輸出結(jié)果:

2020-06-26 16:38:35

時間格式化符號中是不能直接加入中文的,如果想輸出中文日期時間搏色,還是得通過傳統(tǒng)格式化輸出方式

# 加入中文
from datetime import datetime
dt01 = datetime.today()
print("%d年%d月%d日"%(dt01.year,dt01.month,dt01.day))

輸出結(jié)果:

2020年6月26日

七善茎、日期時間類型轉(zhuǎn)換

time類型怎么與datetime類型相互轉(zhuǎn)換

1. time類型轉(zhuǎn)換為datetime類型

使用fromtimestamp()方法

from time import time
from datetime import datetime
time01 = time()  # 獲取當前時間
print("轉(zhuǎn)化前",time01)
print("轉(zhuǎn)化后",datetime.fromtimestamp(time01))  

輸出結(jié)果:

轉(zhuǎn)化前 1593160246.8704221
轉(zhuǎn)化后 2020-06-26 16:30:46.870422
2. datetime類型怎么轉(zhuǎn)換為time類型

使用timestamp()方法

from time import time
from datetime import datetime
datetime01 = datetime.today()
print("轉(zhuǎn)化前",datetime01)
print("轉(zhuǎn)化成時間戳",datetime01.timestamp())
print("轉(zhuǎn)化為時間元組",datetime01.timetuple())

輸出結(jié)果:

轉(zhuǎn)化前 2020-06-26 16:30:46.870481
轉(zhuǎn)化成時間戳 1593160246.870481
轉(zhuǎn)化為時間元組 time.struct_time(tm_year=2020, tm_mon=6, tm_mday=26, tm_hour=16, tm_min=30, tm_sec=46, tm_wday=4, tm_yday=178, tm_isdst=-1)

八、時間日期的運算

1. 計算兩個指定時間的時間差
from datetime import datetime
dt01 = datetime(2020,6,26,12,12,12,121212)
dt02 = datetime(2016,5,26,11,12,12,121202)
print((dt01-dt02).days)
print((dt01-dt02).seconds)
print((dt01-dt02).microseconds)
print(dt01.strftime("%Y-%m-%d %H:%M:%S"),end="和")
print(dt02.strftime("%Y-%m-%d %H:%M:%S"),end="相差")
print((dt01-dt02).days,"天",(dt01-dt02).seconds,"秒",(dt01-dt02).microseconds,"毫秒")

輸出結(jié)果:

1492
3600
10
2020-06-26 12:12:12和2016-05-26 11:12:12相差1492 天 3600 秒 10 毫秒
2. 對某個時間段增加或減少指定時間
from datetime import datetime,timedelta
# 對某一個時間增加或者減少
dt01 = datetime(2020,6,26,12,12,12,121212)
print("100天之后",dt01 + timedelta(days=100))
print("100天之前",dt01 + timedelta(days=-100))
print("100周之后",dt01 + timedelta(weeks=100))
print("100小時之后",dt01 + timedelta(hours=100))
print("100秒之后",dt01 + timedelta(seconds=100))

輸出結(jié)果:

100天之后 2020-10-04 12:12:12.121212
100天之前 2020-03-18 12:12:12.121212
100周之后 2022-05-27 12:12:12.121212
100小時之后 2020-06-30 16:12:12.121212
100秒之后 2020-06-26 12:13:52.121212

九频轿、時間日期案例演示

案例:
準備10個人姓名垂涯,然后為這10個人隨機生成生日【都是90后】

  1. 統(tǒng)計出哪些人是夏季【6月-8月】出生的
  2. 最大的比最小的大多少天
  3. 誰的生日最早,誰的生日最晚
from datetime import date,datetime
from random import randint

# 為每個人構(gòu)建生日
def build_birthday(list_person_name:list):
    # 初始化存儲姓名:生日字典
    name_birthday = {}.fromkeys(list_person_name)
    # 生成生日
    for key in name_birthday:
        temp_year = randint(1990,1999)
        temp_month = randint(1,12)
        temp_day = randint(1,30)
        name_birthday[key] = date(temp_year,temp_month,temp_day)
    # 返回
    return name_birthday

# 獲得夏天出生的人的列表
def person_birthday_summer(name_birthday:dict):
    # 用于存儲夏天出生的key
    list_person = []
    for key in name_birthday:
        if name_birthday[key].month>=6 and name_birthday[key].month<=8:
            list_person.append(key)
    # 返回
    return list_person

# 獲得最大與最小的人出生隔了多少天
def get_person_year_max_min(name_birthday:dict):
    # 在字典中提取出生日
    person_birthday = name_birthday.values()
    distance_birthday = max(person_birthday) - min(person_birthday)
    return distance_birthday.days

# 獲得最早的生日
def get_person_early_birthday(name_birthday:dict):
    for key in name_birthday:
        # 把所有的人的出生年份替換為1990年航邢,忽略年齡對比較生日日期的影響
        name_birthday[key] = name_birthday[key].replace(year=1990)
    person_birth = list(name_birthday.values())
    return sorted(person_birth)[0]

# 獲得最早生日的人的姓名
def get_person_from_early_birthday_name(name_birthday:dict):
    early_birthday = get_person_early_birthday(name_birthday)
    for key in name_birthday:
        if name_birthday[key] == early_birthday:
            early_birthday_name = key
            return early_birthday_name

# 獲得最遲的生日
def get_person_later_birthday(name_birthday:dict):
    for key in name_birthday:
        name_birthday[key] = name_birthday[key].replace(year=1990)
    person_birth = list(name_birthday.values())
    return sorted(person_birth)[len(person_birth)-1]

# 獲得最遲生日的人的姓名
def get_person_from_later_birthday_name(name_birthday:dict):
    later_birthday = get_person_later_birthday(name_birthday)
    for key in name_birthday:
        if name_birthday[key] == later_birthday:
            later_birthday_name = key
            return later_birthday_name

if __name__ == '__main__':
    list_name = ["趙一","錢二","孫三","李四","周五","吳六","鄭七","王八","馮九","陳十"]
    # 為十個人生成生日
    name_birthday = build_birthday(list_name)
    print(name_birthday)
    # 統(tǒng)計出哪些人是在夏天出生的
    birthday_summer_list = person_birthday_summer(name_birthday)
    if (len(birthday_summer_list) == 0):
        print("沒有人的生日在夏天")
    else:
        print("生日為夏天的有:",birthday_summer_list)
    # 最大的比最小的大多少天
    distance = get_person_year_max_min(name_birthday)
    print("最大的比最小的大%d天"%distance)

    # 生日最早的
    early_birthday = get_person_early_birthday(name_birthday)
    print("生日最早的是%d月%d日"%(early_birthday.month,early_birthday.day))
    name_of_early_birthday = get_person_from_early_birthday_name(name_birthday)
    print("生日最早的人的姓名是",name_of_early_birthday)
    # 生日最遲的
    later_birthday = get_person_later_birthday(name_birthday)
    print("生日最遲的是%d月%d日"%(later_birthday.month,later_birthday.day))
    name_of_later_birthday = get_person_from_later_birthday_name(name_birthday)
    print("生日最遲的人的姓名是",name_of_later_birthday)

輸出結(jié)果:

{'趙一': datetime.date(1998, 4, 17), '錢二': datetime.date(1997, 10, 11), '孫三': datetime.date(1997, 7, 26), '李四': datetime.date(1993, 8, 28), '周五': datetime.date(1995, 8, 9), '吳六': datetime.date(1990, 10, 12), '鄭七': datetime.date(1998, 7, 18), '王八': datetime.date(1994, 1, 9), '馮九': datetime.date(1997, 8, 24), '陳十': datetime.date(1999, 9, 1)}
生日為夏天的有: ['孫三', '李四', '周五', '鄭七', '馮九']
最大的比最小的大3246天
生日最早的是1月9日
生日最早的人的姓名是 王八
生日最遲的是10月12日
生日最遲的人的姓名是 吳六

為了讓結(jié)構(gòu)清晰我們使用了函數(shù)耕赘,下一節(jié)我們重點講解函數(shù)用法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膳殷,一起剝皮案震驚了整個濱河市操骡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赚窃,老刑警劉巖册招,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異考榨,居然都是意外死亡跨细,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門河质,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冀惭,“玉大人,你說我怎么就攤上這事掀鹅∩⑿荩” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵乐尊,是天一觀的道長戚丸。 經(jīng)常有香客問我,道長扔嵌,這世上最難降的妖魔是什么限府? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮痢缎,結(jié)果婚禮上胁勺,老公的妹妹穿的比我還像新娘。我一直安慰自己独旷,他們只是感情好署穗,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布寥裂。 她就那樣靜靜地躺著,像睡著了一般案疲。 火紅的嫁衣襯著肌膚如雪封恰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天褐啡,我揣著相機與錄音诺舔,去河邊找鬼。 笑死春贸,一個胖子當著我的面吹牛混萝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萍恕,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼逸嘀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了允粤?” 一聲冷哼從身側(cè)響起崭倘,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎类垫,沒想到半個月后司光,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡悉患,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年残家,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片售躁。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡坞淮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陪捷,到底是詐尸還是另有隱情回窘,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布市袖,位于F島的核電站啡直,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏苍碟。R本人自食惡果不足惜酒觅,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望微峰。 院中可真熱鬧阐滩,春花似錦、人聲如沸县忌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽症杏。三九已至装获,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厉颤,已是汗流浹背穴豫。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逼友,地道東北人精肃。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像帜乞,于是被迫代替她去往敵國和親司抱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359