最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Python模塊time, calendar, datetime

2023-07-01 07:45 作者:水母山楂  | 我要投稿

前言

本系列(指Python Moudules系列)每篇介紹一個(gè)或多個(gè)內(nèi)容沒(méi)有特別多模塊

模塊介紹依賴官方文檔(https://docs.python.org/zh-cn/3.8/library/index.html)或其他第三方官方文檔,主要是對(duì)其內(nèi)容的補(bǔ)充和拓展

內(nèi)容大部分來(lái)源官方文檔,少部分來(lái)源網(wǎng)絡(luò)。太過(guò)深?yuàn)W的內(nèi)容會(huì)只寫(xiě)出不介紹,或省略,或省略掉太過(guò)深?yuàn)W的部分(例如省略部分參數(shù)),或通過(guò)補(bǔ)充介紹(補(bǔ)充介紹的前面通常會(huì)有參考網(wǎng)址)

注意內(nèi)容非常依賴編號(hào)。內(nèi)容中類的展示方式是"編號(hào)<數(shù)字>."表示類的構(gòu)造方法(__init__),"編號(hào)<數(shù)字>.<數(shù)字>"表示類的方法或?qū)傩裕椒ㄒ话闶菍?shí)例方法,其他方法會(huì)在前面?zhèn)渥?,屬性一般是?shí)例屬性,類屬性會(huì)在后面?zhèn)渥?。如果?gòu)造方法無(wú)需傳參會(huì)直接展示類名

使用Python版本3.8,但也會(huì)補(bǔ)充高版本的修改和添加內(nèi)容

系列WPS筆記及其他內(nèi)容的百度網(wǎng)盤(pán)鏈接:

https://pan.baidu.com/s/1fTwjyoM81_OOAccPNhGE9Q?pwd=h3fg

顏色代表含義:

淡灰色:注釋,一般前面有#

綠色:示例

橙色:拓展

紫色:示例中的input用戶輸入內(nèi)容

紅色、藍(lán)色:突出或裝飾文字作用

部分內(nèi)容可能不嚴(yán)謹(jǐn)或者錯(cuò)誤,歡迎指出



一、time——時(shí)間的訪問(wèn)和轉(zhuǎn)換

(1)、概述

time內(nèi)置模塊提供了各種與時(shí)間相關(guān)的函數(shù)

(2)、術(shù)語(yǔ)和慣例的解釋

1.?epoch(紀(jì)元)

時(shí)間開(kāi)始的點(diǎn),epoch是1970年1月1日00:00:00(UTC),是time.gmtime(0)的返回值

2.?seconds since the epoch(自紀(jì)元以來(lái)的秒數(shù)/時(shí)間戳/Unix時(shí)間/POSIX時(shí)間戳)

指自epoch時(shí)間點(diǎn)以來(lái)經(jīng)過(guò)的總秒數(shù),通常不包括閏秒

3.?處理日期范圍

此模塊中的功能可能無(wú)法處理紀(jì)元之前或?qū)?lái)的遠(yuǎn)期日期和時(shí)間。未來(lái)的截止點(diǎn)由C庫(kù)決定;對(duì)于32位系統(tǒng)通常在2038年

# 64位實(shí)測(cè)能到3000年左右(使用ctime()函數(shù)測(cè)試)

4.?UTC

協(xié)調(diào)時(shí)間時(shí),Coordinated Universal Time的縮寫(xiě)。以前也被稱為格林威治標(biāo)準(zhǔn)時(shí)間(GMT)

# 使用UTC而不是CUT作為縮寫(xiě)是英文與法語(yǔ)(Temps Universel Coordonné)之間妥協(xié)的結(jié)果,不是低級(jí)錯(cuò)誤

5.?DST

夏令時(shí),Daylight Saving Time的縮寫(xiě)。在一年的某一段時(shí)間中將當(dāng)?shù)貢r(shí)間調(diào)整(通常)一小時(shí)。DST的規(guī)則非常神奇(由當(dāng)?shù)胤纱_定),并且每年的起止時(shí)間都不同。C語(yǔ)言庫(kù)中有一個(gè)表格,記錄了各地的夏令時(shí)規(guī)則(實(shí)際上,為了靈活性,C語(yǔ)言庫(kù)通常是從某個(gè)系統(tǒng)文件中讀取這張表)。從這個(gè)角度而言,這張表是夏令時(shí)規(guī)則的唯一權(quán)威真理

補(bǔ)充:夏令時(shí) ?# 摘抄自百度百科

是一種為節(jié)約能源而人為規(guī)定地方時(shí)間的制度。一般在天亮早的夏季人為將時(shí)間調(diào)快一小時(shí),可以使人早起早睡,減少照明量,以充分利用光照資源,從而節(jié)約照明用電

6.?精度

由于平臺(tái)限制,各種實(shí)時(shí)函數(shù)的精度可能低于其值或參數(shù)所要求(或給定)的精度。例如,在大多數(shù)Unix系統(tǒng)上,時(shí)鐘頻率僅為每秒50或100次

另一方面,time()和sleep()的精度優(yōu)于它們的Unix等價(jià)物

(1)、時(shí)間元組/時(shí)間值序列/struct_time類

很多Python函數(shù)使用一個(gè)元組裝起來(lái)的9組數(shù)字處理時(shí)間,也就是時(shí)間元組。它是一個(gè)帶有具名元組接口的對(duì)象,存在以下值:

時(shí)間元組的值

# 與C結(jié)構(gòu)不同,月份值是[1, 12]的范圍而不是[0, 11]

# 可以使用類的實(shí)例化創(chuàng)建時(shí)間元組,傳入至少長(zhǎng)度為9的序列(只取前9個(gè)元素)。傳入的長(zhǎng)度不正確或具有錯(cuò)誤類型的元素時(shí)會(huì)引發(fā)TypeError

# 0是時(shí)間元組中任何位置的合法參數(shù);如果它通常是非法的,則該值被強(qiáng)制改為正確的值

# 實(shí)測(cè)在3.8.10版本中0不能作為年,但在3.10.2版本中可以

補(bǔ)充:具名元組/命名元組(named tuple)

指任何繼承自元組,并且其中的可索引元素還能用名稱屬性訪問(wèn)的類。例如time.struct_time類和os.stat_result類


(1)、部分函數(shù)

1.?time()

返回以浮點(diǎn)數(shù)表示的自紀(jì)元以來(lái)的秒數(shù)。閏秒的處理取決于平臺(tái)。在Windows和大多數(shù)Unix系統(tǒng)中,閏秒不計(jì)入從epoch開(kāi)始的秒數(shù)。這通常被稱為Unix時(shí)間

# 即使時(shí)間總是作為浮點(diǎn)數(shù)返回,但并非所有系統(tǒng)都提供高于1秒的精度

# 如果在兩次調(diào)用之間設(shè)置系統(tǒng)時(shí)鐘,它可以返回比先前調(diào)用更低的值

2.?sleep(secs)

暫停執(zhí)行調(diào)用線程達(dá)到給定的秒數(shù)。參數(shù)可以是浮點(diǎn)數(shù),以指示更精確的睡眠時(shí)間

3.?gmtime([secs])

將自紀(jì)元以來(lái)的秒數(shù)表示的時(shí)間轉(zhuǎn)換為UTC的時(shí)間元組,其中dst標(biāo)志始終為零

secs——自紀(jì)元以來(lái)的秒數(shù)。如果未提供或?yàn)镹one,則使用time()所返回的當(dāng)前時(shí)間。一秒內(nèi)的小數(shù)將被忽略

4.?localtime([secs])

與gmtime()相似但轉(zhuǎn)換為當(dāng)?shù)貢r(shí)間。當(dāng)DST適用于給定時(shí)間時(shí),dst標(biāo)志設(shè)置為1

secs——同gmtime()

如果時(shí)間戳超出平臺(tái)C localtime()或gmtime()函數(shù)支持的范圍,此函數(shù)可能引發(fā)OverflowError。而在localtime()或gmtime()失敗時(shí)會(huì)引發(fā)OSError

5.?mktime(t)

localtime()的反函數(shù)。返回值是一個(gè)浮點(diǎn)數(shù),以便與time()兼容

t——時(shí)間元組或完整的9元組(因?yàn)樾枰猟st標(biāo)志;如果它是未知的則使用-1),它表示當(dāng)?shù)貢r(shí)間而不是UTC

如果輸入值不能表示為有效時(shí)間,則OverflowError或ValueError將會(huì)被引發(fā)(這取決于Python或底層C庫(kù)是否捕獲到無(wú)效值)。它可以生成時(shí)間的最早日期取決于平臺(tái)

# UTC的時(shí)間元組轉(zhuǎn)換為自紀(jì)元以來(lái)的秒數(shù)使用calendar模塊的timegm()函數(shù)

示例:

運(yùn)行結(jié)果: ?# 其中一次運(yùn)行結(jié)果(修改了電腦時(shí)間)

2535314154.6809998

time.struct_time(tm_year=2050, tm_mon=5, tm_mday=4, tm_hour=21, tm_min=55, tm_sec=56, tm_wday=2, tm_yday=124, tm_isdst=0)

time.struct_time(tm_year=2050, tm_mon=5, tm_mday=5, tm_hour=5, tm_min=55, tm_sec=56, tm_wday=3, tm_yday=125, tm_isdst=0)

2535314156 2535314156.0

2050

2050

978278399.0

6.?asctime([t])

轉(zhuǎn)換由gmtime()或localtime()所返回的時(shí)間元組t為以下形式的字符串:“Sun Jun 20 23:21:05 1993”。日期字段的長(zhǎng)度為兩個(gè)字符,如果日期只有一個(gè)數(shù)字則會(huì)以空格填充,例如“Wed Jun ?9 04:26:40 1993”

如果t未提供,則會(huì)使用localtime()所返回的當(dāng)前時(shí)間。此函數(shù)不會(huì)使用區(qū)域設(shè)置信息

# 與同名的C函數(shù)不同,asctime()不添加尾隨換行符

7.?ctime([secs])

轉(zhuǎn)換自紀(jì)元以來(lái)的秒數(shù)為asctime()函數(shù)所示形式的字符串

如果secs未提供或?yàn)镹one,則使用time()所返回的當(dāng)前時(shí)間。ctime(secs)等價(jià)于asctime(localtime(secs))。此函數(shù)不會(huì)使用區(qū)域設(shè)置信息

8.?time_ns()

與time()相似,但返回時(shí)間為用整數(shù)表示的自epoch以來(lái)所經(jīng)過(guò)的納秒數(shù)

9.?thread_time()

(以小數(shù)表示的秒為單位)返回當(dāng)線程的系統(tǒng)和用戶CPU時(shí)間的總計(jì)值。它不包括睡眠狀態(tài)(調(diào)用sleep())所消耗的時(shí)間。根據(jù)定義它只作用于線程范圍。返回值的參考點(diǎn)未被定義,因此只有兩次調(diào)用之間的差值才是有效的

使用thread_time_ns()以避免float類型導(dǎo)致的精度缺失

10.?thread_time_ns()

與thread_time()相似,但返回納秒時(shí)間

示例:

運(yùn)行結(jié)果: ?# 其中一次運(yùn)行結(jié)果

Mon Apr 27 01:46:40 1970

Sat Mar ?3 17:46:40 1973

Mon Apr 27 01:46:40 1970

Sat Mar ?3 17:46:40 1973

2535314154265000000 2535314154.265

經(jīng)過(guò)秒數(shù)(浮點(diǎn)型):0.5772037s

經(jīng)過(guò)納秒(整型):577203700ns

經(jīng)過(guò)秒數(shù)(浮點(diǎn)型):0.4992032s

經(jīng)過(guò)納秒(整型):499203200ns

11.?strftime(format[, t])

轉(zhuǎn)換由gmtime()或localtime()所返回的時(shí)間元組t為format參數(shù)指定的字符串。如果未提供t,則使用由localtime()返回的當(dāng)前時(shí)間。format必須是一個(gè)字符串。如果t中的任何字段超出允許的范圍,則引發(fā)ValueError

格式化符號(hào)如下:

%a:本地化的縮寫(xiě)星期名稱

# 本地化使用locale模塊設(shè)置

%A:本地化的完整星期名稱

%b:本地化的縮寫(xiě)月份名稱

%B:本地化的完整月份名稱

%c:本地化的適當(dāng)日期和時(shí)間表示

%d:十進(jìn)制數(shù)[01, 31]表示的月中的一天

%H:十進(jìn)制數(shù)[00, 23]表示的小時(shí)(24小時(shí)制)

%I:十進(jìn)制數(shù)[01, 12]表示的小時(shí)(12小時(shí)制)

%j:十進(jìn)制數(shù)[001, 366]表示的年中的一天

%m:十進(jìn)制數(shù)[01, 12]表示的月

%M:十進(jìn)制數(shù)[00, 59]表示的分鐘

%p:本地化的AM或PM

%S:十進(jìn)制數(shù)[00, 61]表示的秒

%U:十進(jìn)制數(shù)[00, 53]表示的一年中的星期數(shù)(星期日作為一周的第一天)。在第一個(gè)星期日之前的新年(公歷新年,也就是元旦)中的所有日子都被認(rèn)為是在第0周

%w:十進(jìn)制[0, 6]表示的周中的一天(0是星期日)

%W:十進(jìn)制數(shù)[00, 53]表示的一年中的星期數(shù)(星期一作為一周的第一天)。在第一個(gè)星期一之前的新年中的所有日子都被認(rèn)為是在第0周

%x:本地化的適當(dāng)日期表示

%X:本地化的適當(dāng)時(shí)間表示

%y:十進(jìn)制數(shù)[00, 99]表示的沒(méi)有世紀(jì)的年份

%Y:十進(jìn)制數(shù)(四位數(shù))表示的帶世紀(jì)的年份

%z:時(shí)區(qū)偏移以格式+HHMM或-HHMM形式的UTC/GMT的正或負(fù)時(shí)差指示,其中H表示十進(jìn)制小時(shí)數(shù)字,M表示小數(shù)分鐘數(shù)字[-23:59, +23:59]

%Z:當(dāng)前的時(shí)區(qū)名稱(如果不存在時(shí)區(qū),則不包含字符)

# 在高版本%Z已棄用

%%:字符“%”

# 在某些平臺(tái)上,可選的字段寬度和精度規(guī)范可緊跟在'%'之后

某些平臺(tái)還支持其他的格式化符號(hào),上面只列出具有ANSI C標(biāo)準(zhǔn)化的含義的格式化符號(hào),其他部分格式化符號(hào)如下:

%n:換行符

%t:水平制表符

%C:十進(jìn)制數(shù)[00, 99]表示的世紀(jì)

%h:與“%b”相同

%D:等價(jià)于“%m/%d/%y”

%F:等價(jià)于“%Y-%m-%d”

%R:等價(jià)于“%H:%M”

%T:等價(jià)于“%H:%M:%S”

# ISO 8601年份見(jiàn)datetime模塊date.isocalendar()方法

%g:十進(jìn)制數(shù)[00, 99]表示的沒(méi)有世紀(jì)的年份

%G:十進(jìn)制數(shù)(四位數(shù))表示的帶世紀(jì)的ISO 8601年份

%V:十進(jìn)制數(shù)[01, 53]表示的ISO 8601周序號(hào)

%u:十進(jìn)制數(shù)[1, 7]表示的ISO 8601周日期,其中1表示星期一

示例:

運(yùn)行結(jié)果1: ?# 其中一次運(yùn)行結(jié)果

2001/9/9 1:46:40, 2001/9/9 1:46:40

縮寫(xiě)星期名稱:周日,完整星期名稱:星期日

縮寫(xiě)月份名稱:九月,完整月份名稱:九月

上午或下午:上午

世紀(jì):20,沒(méi)有世紀(jì)的年份:01,帶世紀(jì)的年份:2001

%D:09/09/01,%F:2001-09-09

%R:01:46,%T:01:46:40

運(yùn)行結(jié)果2: ?# 去掉設(shè)置地區(qū)

Sun Sep ?9 01:46:40 2001, 09/09/01 01:46:40

縮寫(xiě)星期名稱:Sun,完整星期名稱:Sunday

縮寫(xiě)月份名稱:Sep,完整月份名稱:September

上午或下午:AM

世紀(jì):20,沒(méi)有世紀(jì)的年份:01,帶世紀(jì)的年份:2001

%D:09/09/01,%F:2001-09-09

%R:01:46,%T:01:46:40

12.?strptime(string[, format])

根據(jù)格式format解析表示時(shí)間的字符串string。返回值是一個(gè)時(shí)間元組

format——同strftime(),默認(rèn)為匹配ctime()所返回的格式“%a %b %d %H:%M:%S %Y”

如果string不能根據(jù)format來(lái)解析,或者解析后它有多于的數(shù)據(jù),則會(huì)引發(fā)ValueError

# 注意,ctime()不會(huì)使用區(qū)域設(shè)置,但此函數(shù)會(huì)使用區(qū)域設(shè)置

當(dāng)無(wú)法推斷出更準(zhǔn)確的值時(shí),用于填充任何缺失數(shù)據(jù)的默認(rèn)值是(1900, 1, 1, 0, 0, 0, 0, 1, -1)。string和format必須都為字符串

format中的僅支持具有ANSI C標(biāo)準(zhǔn)化的含義的格式化符號(hào)

# 也就是像%D、%F這些的不支持

# %y會(huì)按照POSIX和ISO C標(biāo)準(zhǔn)進(jìn)行轉(zhuǎn)換:數(shù)值69--99映射為1969--1999,而數(shù)值0--68被映射為2000--2068

# 如果使用%I來(lái)解析小時(shí),%p會(huì)影響輸出小時(shí)字段(不加%p默認(rèn)上午)

# %U和%W用于指定星期幾和年份時(shí)計(jì)算日期,否則忽略

# %G、%V、%u可用于此函數(shù),%G和%V使用時(shí)必須%G、%V、(%A, %a, %w, %u)一起使用

13.?monotonic()

(以小數(shù)表示的秒為單位)返回一個(gè)單調(diào)時(shí)鐘的值,即不能倒退的時(shí)鐘。該時(shí)鐘不受系統(tǒng)時(shí)鐘更新的影響。返回值的參考點(diǎn)未被定義,因此只有兩次調(diào)用之間的差值才是有效的

使用monotonic_ns()以避免float類型導(dǎo)致的精度損失

14.?monotonic_ns()

與monotonic相似,但返回時(shí)間為納秒數(shù)

15.?perf_counter()

(以小數(shù)表示的秒為單位)返回一個(gè)性能計(jì)數(shù)器的值,即用于測(cè)量較短持續(xù)時(shí)間的具有最高有效精度的時(shí)鐘。它會(huì)包括睡眠狀態(tài)所消耗的時(shí)間并且作用于全系統(tǒng)范圍。返回值的參考點(diǎn)未被定義,因此只有兩次調(diào)用之間的差值才是有效的

使用perf_counter_ns()以避免float類型導(dǎo)致的精度損失

16.?perf_counter_ns()

與perf_counter()相似,但返回時(shí)間為納秒數(shù)

17.?process_time()

(以小數(shù)表示的秒為單位)返回當(dāng)前進(jìn)程的系統(tǒng)和用戶CPU時(shí)間的總計(jì)值。它不包括睡眠狀態(tài)所消耗的時(shí)間。根據(jù)定義它只作用于進(jìn)程范圍。返回值的參考點(diǎn)未被定義,因此只有兩次調(diào)用之間的差值才是有效的

使用process_time_ns()以避免float類型導(dǎo)致的精度損失

18.?process_time_ns()

與process_time()相似,但返回時(shí)間為納秒數(shù)

示例1:

運(yùn)行結(jié)果: ?# 其中一次運(yùn)行結(jié)果

格式:年-月-日 時(shí):分:秒

2000-1-1 1:0:0

2000-01-01 01:00:00

格式:12小時(shí)制 AM/PM

5 pm

05 PM

沒(méi)有%p默認(rèn)AM: 05 AM

格式:年 星期 第幾個(gè)星期(星期一算一周第一天)

2000 0 5

2000-02-06 ?# 計(jì)算2000年第5個(gè)星期日

格式:年 星期 第幾個(gè)星期(星期一算一周第一天)

2000 0 6

2000-02-13 ?# 計(jì)算2000年第6個(gè)星期日

示例2:

運(yùn)行結(jié)果: ?# 其中一次運(yùn)行結(jié)果

單調(diào)時(shí)鐘:0.9979999999995925s

性能計(jì)數(shù)器:1.0006780659999999s

當(dāng)前進(jìn)程:1.1076071s

(2)、時(shí)區(qū)常量

1.?altzone

本地DST時(shí)區(qū)的偏移量,以UTC為單位的秒數(shù),如果已定義。如果當(dāng)?shù)谼ST時(shí)區(qū)在UTC以東(如在西歐,包括英國(guó)),則是負(fù)數(shù)。只有當(dāng)daylight非零時(shí)才使用它

2.?daylight

如果定義了DST時(shí)區(qū),則為非零

3.?timezone

本地(非DST)時(shí)區(qū)的偏移量,UTC以西的秒數(shù)(西歐大部分地區(qū)為負(fù),美國(guó)為正,英國(guó)為零)

4.?tzname

兩個(gè)字符串的元組:第一個(gè)是本地非DST時(shí)區(qū)的名稱,第二個(gè)是本地DST時(shí)區(qū)的名稱。如果未定義DST時(shí)區(qū),則不應(yīng)使用第二個(gè)字符串

# 對(duì)于上述時(shí)區(qū)常量,該值由模塊加載時(shí)有效的時(shí)區(qū)規(guī)則確定,或者最后一次tzset()被調(diào)用時(shí),并且在過(guò)去的時(shí)間可能不正確。建議使用來(lái)自localtim()結(jié)果的tm_gmtoff和tm_zone來(lái)獲取時(shí)區(qū)信息

# tzset()函數(shù)可用性Unix


二、calendar——日歷相關(guān)函數(shù)

(1)、概述

calendar內(nèi)置模塊提供了與日歷相關(guān)的實(shí)用函數(shù)。默認(rèn)情況下,這些日歷把星期一當(dāng)做一周的第一天,星期天為一周的最后一天(按照歐洲慣例)。可以用setfirstweekday()函數(shù)/方法設(shè)置一周的第一天為星期天(6)或者其他任意一天。使用整數(shù)作為指定日期的參數(shù)

# 根據(jù)ISO 8601標(biāo)準(zhǔn),還規(guī)定了0和負(fù)數(shù)年份。0年指公元前1年,-1年指公元前2年,以此類推

(2)、數(shù)據(jù)屬性

# “calendar.數(shù)據(jù)屬性”獲取

1.?day_name

在當(dāng)前語(yǔ)言環(huán)境下表示星期幾的數(shù)組

2.?day_abbr

在當(dāng)前語(yǔ)言環(huán)境下表示星期幾縮寫(xiě)的數(shù)組

3.?month_name

在當(dāng)前語(yǔ)言環(huán)境下表示月份的數(shù)組。遵循一月的月號(hào)為1的通常慣例,所以它的長(zhǎng)度為13且month_name[0]是空字符串

4.?month_abbr

在當(dāng)前語(yǔ)言環(huán)境下表示月份縮寫(xiě)的數(shù)組。遵循一月的月號(hào)為1的通常慣例,所以它的長(zhǎng)度為13且month_name[0]是空字符串

5.?MONDAY/TUESDAY/WEDNESDAY/THURSDAY/FRIDAY/SATURDAY/SUNDAY

星期內(nèi)序號(hào)的別名,其中MONDAY是0、SUNDAY是6

(3)、函數(shù)

1.?setfirstweekday(weekday)

設(shè)置一周的開(kāi)始(0表示星期一,6表示星期天)

# 可使用提供的幾個(gè)常量(MONDAY, TUESDAY...)設(shè)置

2.?firstweekday()

返回當(dāng)前設(shè)置的每星期的第一天的數(shù)值

3.?isleap(year)

如果year是閏年則返回True,否則返回False

4.?leapdays(y1, y2)

返回在范圍y1至y2(不包含y2)之間的閏年的年數(shù),其中y1和y2

是年份

# 此函數(shù)適用于跨越一個(gè)世紀(jì)變化的范圍

5.?weekday(year, month, day)

返回給定日期的星期(0是星期一)

示例:

運(yùn)行結(jié)果: ?# 其中一次運(yùn)行結(jié)果

['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']

['周一', '周二', '周三', '周四', '周五', '周六', '周日']

['', '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']

['', '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']

0

2

True

True

5

5

6.?weekheader(n)

返回一個(gè)包含星期幾縮寫(xiě)名的頭。n指定星期幾縮寫(xiě)的字符寬度

# 當(dāng)n >= 9時(shí)是星期的全稱而不是縮寫(xiě)

7.?monthrange(year, month)

返回指定年份的指定月份的第一天是星期幾和這個(gè)月的天數(shù)

8.?monthcalendar(year, month)

返回表示一個(gè)月的日歷的矩陣。每一行代表一周,月份外的日子由零表示

每周從周一開(kāi)始,除非使用setfirstweekday()改變?cè)O(shè)置

示例:

運(yùn)行結(jié)果:

(5, 31)

[[0, 0, 0, 0, 0, 1, 2], [3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16], [17, 18, 19, 20, 21, 22, 23], [24, 25, 26, 27, 28, 29, 30], [31, 0, 0, 0, 0, 0, 0]]

????????January 2000

Mon Tue Wed Thu Fri Sat Sun

??????????????????????1 ??2

??3 ??4 ??5 ??6 ??7 ??8 ??9

?10 ?11 ?12 ?13 ?14 ?15 ?16

?17 ?18 ?19 ?20 ?21 ?22 ?23

?24 ?25 ?26 ?27 ?28 ?29 ?30

?31

# 這里顯得不齊是因?yàn)樽煮w原因:數(shù)字、字母和空格寬度不同

# 也可以設(shè)置中文環(huán)境將weekheader輸出變?yōu)?#34;周一、周二...",這里不使用的原因同上

9.?month(theyear, themonth, w=0, l=0)

使用TextCalendar類的formatmonth()以多行字符串形式返回月份日歷

# 月份日歷的效果與上個(gè)示例打印的日歷相同

# month()和calendar()具體說(shuō)明見(jiàn)TextCalendar類

10.?prmonth(theyear, themonth, w=0, l=0)

打印由month()返回的一個(gè)月的日歷

# 相當(dāng)于print(calendar.month())

11.?calendar(year, w=2, l=1, c=6, m=3)

使用TextCalendar類的formatyear()以多行字符串的形式返回整年的3列的日歷

12.?prcal(year, w=2, l=1, c=6, m=3)

打印由calendar()返回的整年的日歷

13.?timegm(tuple)

將UTC的時(shí)間元組轉(zhuǎn)換為自紀(jì)元以來(lái)的秒數(shù),time.gmtime()的反函數(shù)。返回值是一個(gè)整數(shù)

(4)、

1.?Calendar(firstweekday=0)

創(chuàng)建一個(gè)Calendar對(duì)象,這個(gè)對(duì)象提供了一些可被用于準(zhǔn)備日歷數(shù)據(jù)格式化的方法。這個(gè)類本身不執(zhí)行任何格式化操作。這部分任務(wù)應(yīng)由子類來(lái)完成

firstweekday——指定每星期第一天的整數(shù)。0是星期一(默認(rèn)值),6是星期天

1.1.?getfirstweekday()

獲取當(dāng)前設(shè)置的每星期的第一天的數(shù)值

1.2.?setfirstweekday(firstweekday)

設(shè)置一周的開(kāi)始(0表示星期一,6表示星期天)

# 這是設(shè)置Calendar對(duì)象的一周的開(kāi)始

1.3.?firstweekday屬性

當(dāng)前設(shè)置的每星期的第一天

# 這是property類的實(shí)例,獲取屬性值是調(diào)用getfirstweekday()方法,設(shè)置屬性值是調(diào)用setfirstweekday()方法

1.4.?iterweekdays()

返回一個(gè)迭代器,迭代器的內(nèi)容為一星期的數(shù)字。迭代器的第一個(gè)值與firstweekday屬性的值一致

1.5.?itermonthdates(year, month)

1.6.?itermonthdays(year, month)

1.7.?itermonthdays2(year, month)

1.8.?itermonthdays3(year, month)

1.9.?itermonthdays4(year, month)

都是返回一個(gè)迭代器,迭代器的內(nèi)容為year年month月的所有日期,日期包含了本月頭尾用于組成完整一周的日期。區(qū)別如下:

itermonthdates()返回的日期是datetime.date對(duì)象

itermonthdays()返回的日期為當(dāng)月每一天的日期對(duì)應(yīng)的天數(shù)。對(duì)于不在當(dāng)月的日期。顯示為0

itermonthdays2()迭代器中的元素為一個(gè)由日期和代表星期幾的數(shù)字組成的元組

itermonthdays3()迭代器的元素為一個(gè)由年,月,日組成的元組

itermonthdays4()迭代器的元素為一個(gè)由年,月,日和代表星期幾組成的元組

1.10.?monthdatescalendar(year, month)

1.11.?monthdayscalendar(year, month)

1.12.?monthdays2calendar(year, month)

都是返回返回一個(gè)表示指定年月的周列表。區(qū)別如下:

monthdatescalendar()的周列表由七個(gè)datetime.date對(duì)象組成

monthdayscalendar()的周列表由七個(gè)代表日期的數(shù)字組成,不在這個(gè)月的日期為0

monthdays2calendar()的周列表由七個(gè)代表日期的數(shù)字和代表周幾的數(shù)字組成的二元元組

1.13.?yeardatescalendar(year, width=3)

1.14.?yeardayscalendar(year, width=3)

1.15.?yeardays2calendar(year,width=3)

都是返回可以用來(lái)格式化的指定年月的數(shù)據(jù),返回值是一個(gè)列表,列表是月份組成的行。每一行包含了最多width個(gè)月(默認(rèn)為3)。每個(gè)月包含了4到6周。區(qū)別主要是周列表的區(qū)別,與編號(hào)1.10, 1.11, 1.12的區(qū)別相同

示例:

運(yùn)行結(jié)果:

3

3

[4, 5, 6, 0, 1, 2, 3]

----------------------

1999-12-31 <class 'datetime.date'>

0

(0, 4)

(1999, 12, 31)

(1999, 12, 31, 4)

----------------------

[datetime.date(1999, 12, 31), datetime.date(2000, 1, 1), datetime.date(2000, 1, 2), datetime.date(2000, 1, 3), datetime.date(2000, 1, 4), datetime.date(2000, 1, 5), datetime.date(2000, 1, 6)]

[0, 1, 2, 3, 4, 5, 6]

[(0, 4), (1, 5), (2, 6), (3, 0), (4, 1), (5, 2), (6, 3)]

[0, 1, 2, 3, 4, 5, 6]

2.?TextCalendar(firstweekday=0)

生成純文本日歷的類

# 這個(gè)類是Calendar類的子類,構(gòu)造方法同Calendar類

# 下面展示的方法是官方文檔中出示的方法

2.1.?formatmonth(theyear, themonth, w=0, l=0)

返回一個(gè)多行字符串來(lái)表示指定年月的日歷。w為日期的寬度,但始終保持日期居中。l指定每星期占用的行數(shù)。以上這些還依賴于構(gòu)造方法或者setfirstweekday()方法指定的一周的第一天是哪一天

2.2.?prmonth(theyear, themonth, w=0, l=0)

打印由formatmonth()返回的一個(gè)月的日歷


2.3.?formatyear(theyear, w=2, l=1, c=6, m=3)

返回一個(gè)多行字符串,這個(gè)字符串為一個(gè)m列日歷。可選參數(shù)w, l和c分別表示日期的寬度,每星期占用的行數(shù),和月之間的間隔。同樣以上這些還依賴于構(gòu)造方法或者setfirstweekday()方法指定的一周的第一天是哪一天

2.4.?pryear(theyear, w=2, l=1, c=6, m=3)

打印由formatyear()返回的整年的日歷

3.?HTMLCalendar(firstweekday=0)

生成HTML日歷的類

# 這個(gè)類也是Calendar類的子類,構(gòu)造方法同Calendar類

# 下面展示的方法是官方文檔中出示的方法

3.1.?formatmonth(theyear, themonth, withyear=True)

返回一個(gè)HTML表格作為指定年月的日歷

withyear——如果為True(默認(rèn)值),則年份將會(huì)包含在表頭,否則只顯示月份

3.2.?formatyear(theyear, width=3)

返回一個(gè)HTML表格作為指定年份的日歷

width——用于規(guī)定每一行顯示月份的數(shù)量(默認(rèn)為3)

3.3.?formatyearpage(theyear, width=3, css='calendar.css', encoding=None)

返回一個(gè)完整的HTML頁(yè)面作為指定年份的日歷

width——用于規(guī)定每一行顯示月份的數(shù)量(默認(rèn)為3)

css——層疊樣式表的名字。如果不使用任何層疊樣式表,可以使用None

encoding——輸出頁(yè)面的編碼默認(rèn)為系統(tǒng)的默認(rèn)編碼

# 重載下列屬性可以自定義應(yīng)用日歷的樣式

3.4.?cssclasses類屬性

一個(gè)對(duì)應(yīng)星期一到星期天的CSS class列表。默認(rèn)列表為

cssclasses = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]

列表的長(zhǎng)度必須為7

3.5.?cssclass_noday類屬性

工作日的CSS類在上個(gè)月或下個(gè)月發(fā)生

3.6.?cssclasses_weekday_head類屬性

用于標(biāo)題行中的工作日名稱的CSS類列表。默認(rèn)值與cssclasses相同

3.7.?cssclass_month_head類屬性

月份的頭CSS類(由formatmonthname()使用)。默認(rèn)值為"month"

3.8.?cssclass_month類屬性

某個(gè)月的月歷的CSS類(由formatmonth()使用)。默認(rèn)值為"month"

3.9.?cssclass_year類屬性

某年的年歷的CSS類(由formatyear()使用)。默認(rèn)值為"year"

3.10.?cssclass_year_head類屬性

年歷的表頭CSS類(由formatyear()使用)。默認(rèn)值為"year"

4.?LocaleTextCalendar(firstweekday=0, locale=None)

5.?LocaleHTMLCalendar(firstweekday=0, locale=None)

在構(gòu)造方法中傳遞一個(gè)語(yǔ)言環(huán)境locale,并且返回的月份和星期幾的名稱是在特定語(yǔ)言環(huán)境locale中

# 分別是TextCalendar和HTMLCalendar的子類

# 兩個(gè)類的構(gòu)造方法、formatweekday()和formatmonthname()方法會(huì)暫時(shí)將LC_TIME的locale改為指定的locale。由于當(dāng)前的區(qū)域設(shè)置是進(jìn)程范圍的設(shè)置,因此它們不是線程安全的

二、datetime——基本日期和時(shí)間類型

(1)、概述

datetime內(nèi)置模塊提供用于處理日期和時(shí)間的類

(2)、感知型對(duì)象和簡(jiǎn)單型對(duì)象

日期和時(shí)間對(duì)象可以根據(jù)它們是否包含時(shí)區(qū)信息而分為“感知型”和“簡(jiǎn)單型”

1.?感知型對(duì)象

感知型對(duì)象是用來(lái)表示一個(gè)沒(méi)有解釋空間的固定時(shí)間點(diǎn)。在充分掌握應(yīng)用性算法和政治性時(shí)間調(diào)整信息例如時(shí)區(qū)和夏令時(shí)的情況下,一個(gè)感知型對(duì)象就能相對(duì)于其他感知型對(duì)象來(lái)精確定位自身時(shí)間點(diǎn)

2.?簡(jiǎn)單型對(duì)象

簡(jiǎn)單型對(duì)象不論表示的是UTC、當(dāng)?shù)貢r(shí)間還是某個(gè)其他時(shí)區(qū)的時(shí)間完全取決于具體程序。簡(jiǎn)單型對(duì)象沒(méi)有包含足夠多的信息來(lái)無(wú)歧義地相對(duì)于其他date/time對(duì)象來(lái)定位自身時(shí)間點(diǎn)

簡(jiǎn)單型對(duì)象更易于理解和使用,代價(jià)則是忽略了某些現(xiàn)實(shí)性考量

# 也就是感知型對(duì)象表示一個(gè)固定時(shí)間點(diǎn),簡(jiǎn)單型對(duì)象表示的時(shí)間點(diǎn)取決具體程序

3.?應(yīng)用感知型對(duì)象

datetime和time對(duì)象具有一個(gè)可選的時(shí)區(qū)信息屬性tzinfo,它可被設(shè)為抽象類tzinfo的子類的一個(gè)實(shí)例

這些tzinfo對(duì)象會(huì)捕獲與UTC時(shí)間的差值、時(shí)區(qū)名稱以及夏令時(shí)是否生效等信息

datetime模塊值提供了一個(gè)具體的tzinfo類,即timezone類

補(bǔ)充:抽象基類/抽象類(abstract base class,ABC)

# 參考知乎89549054、百度百科、官方文檔

1.抽象函數(shù)/純虛函數(shù)(pure virtual function)

抽象函數(shù)只有函數(shù)名、參數(shù)和返回值類型,不需要函數(shù)體,它的實(shí)現(xiàn)需要讓子類去實(shí)現(xiàn)

2.抽象基類作用

·處理繼承問(wèn)題方面更加規(guī)范、系統(tǒng)

·明確調(diào)用之間的相互關(guān)系

·使得繼承層次更加清晰

·限定子類實(shí)現(xiàn)的方法

3.概念

# 這里的“函數(shù)”和“方法”為同一意思

抽象基類是對(duì)鴨子類型的補(bǔ)充,它提供了一種定義接口的新方式

抽象基類必須包含一個(gè)抽象函數(shù),它是一個(gè)不完整的類,既有自己實(shí)現(xiàn)的方法,也有需要子類重寫(xiě)的方法(抽象方法)

抽象基類不可以被實(shí)例化。子類需要實(shí)現(xiàn)基類指定的抽象方法

# 可以使用abc模塊創(chuàng)建自己的ABC

(3)、常量

1.?MINYEAR

date或datetime對(duì)象允許的最小年份。常量MINYEAR是1

2.?MAXYEAR

date或datetime對(duì)象允許的最大年份。常量MAXYEAR是9999

# 在3.11版添加了UTC常量,是datetime.timezone.utc的別名

(4)、

datetime模塊定義了date、time、datetime、timedelta、tzinfo和timezone類,這些類型共享這些通用特性:

·?這些類型的對(duì)象都是不可變的

·?這些類型的對(duì)象都是可哈希的(可作為字典的鍵)

·?這些類型的對(duì)象支持通過(guò)pickle模塊進(jìn)行高效的封存(進(jìn)行序列化)

子類關(guān)系如下:

object

????timedelta

????tzinfo

????????timezone

????time

????date

????????datetime

對(duì)象是感知型還是簡(jiǎn)單型:

date類型的對(duì)象都是簡(jiǎn)單型的

datetime對(duì)象d在以下條件同時(shí)成立時(shí)將是感知型的,其他情況是簡(jiǎn)單型的:

·?d.tzinfo不為None

·?d.tzinfo.utcoffset(d)不返回None

time對(duì)象t在以下條件同時(shí)成立時(shí)將是感知型的,其他情況是簡(jiǎn)單型的:

·?t.tzinfo不為None

·?t.tzinfo.utcoffset(None)不返回None

感知型和簡(jiǎn)單型之間的區(qū)別不適用于timedelta對(duì)象

1.?timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

timedelta對(duì)象表示兩個(gè)date或者time的時(shí)間間隔

所有參數(shù)可選且默認(rèn)值為0。這些參數(shù)可以是整數(shù)或浮點(diǎn)數(shù),正數(shù)或負(fù)數(shù)

days——天

seconds——秒

microseconds——微秒

milliseconds——毫秒

minutes——分鐘

hours——小時(shí)

weeks——星期

只有days, seconds和microseconds會(huì)存儲(chǔ)在內(nèi)部。參數(shù)單位的換算規(guī)則如下:

·?1毫秒會(huì)轉(zhuǎn)換成1000微秒

·?1分鐘會(huì)轉(zhuǎn)換成60秒

·?1小時(shí)會(huì)轉(zhuǎn)換成3600秒

·?1星期會(huì)轉(zhuǎn)換成7天

并且days, seconds和microseconds會(huì)經(jīng)標(biāo)準(zhǔn)化處理以保證表達(dá)方式的唯一性,即:

·?0 <= microseconds < 1000000

·?0 <= seconds < 3600*24(一天的秒數(shù))

·?-999999999 <= days <= 999999999

如果有任何參數(shù)為浮點(diǎn)型并且microseconds的值為小數(shù)的情況下,從所有參數(shù)中余下的微秒數(shù)將被合并,并使用四舍五入偶不入奇的規(guī)則將總計(jì)值舍入到最接近的整數(shù)微秒值。否則轉(zhuǎn)換和標(biāo)準(zhǔn)化過(guò)程將是完全精確的(不會(huì)丟失信息)

如果標(biāo)準(zhǔn)化后的days數(shù)值超過(guò)了指定范圍,將會(huì)拋出OverflowError異常

示例:

運(yùn)行結(jié)果:

datetime.timedelta(days=8, seconds=10000, microseconds=20000)

datetime.timedelta(0) datetime.timedelta(microseconds=2)

datetime.timedelta(days=-1, seconds=86399, microseconds=999999)

-1 day, 23:59:59.999999

1.1.?類屬性

1.1.1.?min

最小的timedelta類對(duì)象,timedelta(-999999999)

1.1.2.?max

最大的timedelta類對(duì)象,timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)

1.1.3.?resolution

兩個(gè)不相等的timedelta類對(duì)象最小的時(shí)間間隔,timedelta(microseconds=1)

# 因?yàn)闃?biāo)準(zhǔn)化的緣故,timedelta.max > -timedelta.min,-timedelta.max不是一個(gè)timedelta 類對(duì)象

1.2.?實(shí)例屬性(只讀)

1.2.1.?days

天,值范圍[-999999999, 999999999]

1.2.2.?seconds

秒,值范圍[0, 86399]

1.2.3.?microseconds

微秒,值范圍[0, 999999]

1.3.?支持的運(yùn)算

1.3.1.?t1 = t2 + t3

t2和t3的和。運(yùn)算后t1 - t2 == t3 and t1 - t3 == t2必為真值。(1)

1.3.2.?t1 = t2 - t3

t2減t3的差。運(yùn)算后t1 == t2 - t3 and t2 == t1 == t3必為真值。(1)

# 通常t2 - t3與t2 + (-t3)是等價(jià)的,除非t3等于timedelta.max;這種情況下t2 - t3會(huì)返回結(jié)果,t2 + (-t3)會(huì)溢出


1.3.3.?t1 = t2 * i或t1 = i * t2

乘以一個(gè)整數(shù)。運(yùn)算后假如i != 0則t1 // i == t2必為真值

通常,t1 * i == t1 * (i-1) + t1為真值。(1)

1.3.4.?t1 = t2 * f或t1 = f * t2

乘以一個(gè)浮點(diǎn)數(shù)。結(jié)果會(huì)被舍入到timedelta最接近的整數(shù)倍。精度使用四舍五偶入奇不入規(guī)則

1.3.5.?f = t2 / t3

總時(shí)間t2除以時(shí)間間隔t3。返回一個(gè)float對(duì)象。(3)

1.3.6.?t1 = t2 / f或t1 = t2 / i

除以一個(gè)浮點(diǎn)數(shù)或整數(shù)。結(jié)果會(huì)被舍入到timedelta最接近的整數(shù)倍。精度使用四舍五偶入奇不入規(guī)則

1.3.7.?t1 = t2 // i或t1 = t2 // t3

整除向下取整。第一種情況返回timedelta對(duì)象,第二種情況返回整數(shù)。(3)

1.3.8.?t1 = t2 % t3

取余。余數(shù)為一個(gè)timedelta對(duì)象。(3)

1.3.9.?q, r = divmod(t1, t2)

計(jì)算出商和余數(shù):q = t1 // t2, r = t1 % t2。q是一個(gè)整數(shù),r是一個(gè)timedelta對(duì)象

1.3.10.?+t1

返回一個(gè)相同數(shù)值的timedelta對(duì)象

1.3.11.?-t1

等價(jià)于timedelta(-t1.days, -t1.secondes, -t1.microseconds)和t1 * -1。(1)

1.3.12.?abs(t)

當(dāng)t.days >= 0時(shí)等于+t,當(dāng)t.days < 0時(shí)等于-t。(2)

1.3.13.?str(t)

返回一個(gè)形如[D day[s], ][H]H:MM:SS[.UUUUUU]的字符串,當(dāng)t為負(fù)數(shù)的時(shí)候,D也為負(fù)數(shù)

1.3.14.?repr(t)

返回一個(gè)timedelta對(duì)象的字符串表示形式,作為附帶正規(guī)屬性值的構(gòu)造器調(diào)用

?

注釋:

1.結(jié)果準(zhǔn)確,但可能會(huì)溢出

2.結(jié)果準(zhǔn)確,不會(huì)溢出

3.除以0將會(huì)拋出ZeroDivisionError異常

?

1.3.15.?==, !=

可以跟任何類型的對(duì)象比較

1.3.16.?<, >, <=, >=

只能和timedelta對(duì)象比較,否則引發(fā)TypeError

# 在布爾運(yùn)算中,timedelta(0)視為False,其他視為True

1.4.?實(shí)例方法

1.4.1.?total_seconds()

返回時(shí)間間隔(timedelta對(duì)象)包含了多少秒。等價(jià)于td / timedelta(seconds=1)。其他單位可直接用除法形式(例如td / timedelta(microseconds=1))

# 時(shí)間間隔較大時(shí),結(jié)果中的微秒將會(huì)失真(大多數(shù)平臺(tái)上大于270年視為一個(gè)較大的時(shí)間間隔)

示例:

2.?date(year, month, day)

date對(duì)象代表一個(gè)理想化歷法中的日期(年、月和日),即當(dāng)今的格列高利歷(公元)向前后兩個(gè)方向無(wú)限延伸

公元1年1月1日是第1日,公元1年1月2日是第2日,以此類推

year——年,MINYEAR <= year <= MAXYEAR

month——月,1 <= month <= 12

day——日,1 <= day <= 給定年月對(duì)應(yīng)的天數(shù)

如果參數(shù)不在這些范圍內(nèi),則拋出ValueError異常

2.1.?類屬性

2.1.1.?min

最小的日期,date(MINYEAR, 1, 1)

2.1.2.?max

最大的日期,date(MAXYEAR, 12, 31)

2.1.3.?resolution

兩個(gè)日期對(duì)象的最小間隔,timedelta(days=1)

2.2.?實(shí)例屬性(只讀)

2.2.1.?year

年,值范圍[MINYEAR, MAXYEAR]

2.2.2.?month

月,值范圍[1, 12]

2.2.3.?day

天,值范圍[1, 給定年月對(duì)應(yīng)的天數(shù)]

2.3.?類方法

2.3.1.?today()

返回當(dāng)前的本地日期,返回date對(duì)象

這等價(jià)于date.fromtimestamp(time.time())

2.3.2.?fromtimestamp(timestamp)

返回對(duì)應(yīng)于時(shí)間戳timestamp的當(dāng)?shù)貢r(shí)間,返回date對(duì)象

如果時(shí)間戳數(shù)值超出所在平臺(tái)C localtime()函數(shù)支持的范圍則引發(fā)OverflowError,在localtime()出錯(cuò)時(shí)會(huì)引發(fā)OSError。在時(shí)間戳概念包含閏秒的非POSIX系統(tǒng)上,閏秒會(huì)被忽略


2.3.3.?fromordinal(ordinal)

返回對(duì)應(yīng)于預(yù)期格列高利歷序號(hào)的日期,其中公元1年1月1日的序號(hào)為1,返回date對(duì)象

除非1 <= ordinal <= date.max.toordinal()否則會(huì)引發(fā)ValueError。對(duì)于任意日期d,date.fromordinal(d.toordinal()) == d

# toordinal()實(shí)例方法是返回日期的預(yù)期格列高利歷序號(hào)

2.3.4.?fromisoformat(date_string)

返回一個(gè)對(duì)應(yīng)于YYYY-MM-DD格式給出的date_string的date對(duì)象。這是date.isoformat()實(shí)例方法的逆操作

# 在3.11版支持任何有效的ISO 8601格式日期字符串,除了序號(hào)日期

2.3.5.?fromisocalendar(year, week, day)

返回指定year, week和day所對(duì)應(yīng)ISO歷法日期的date,這是date.isocalendar()實(shí)例方法的逆操作

# 具體見(jiàn)date.isocalendar()實(shí)例方法

2.4.?支持的運(yùn)算

2.4.1.?date2 = date1 + timedelta

date1加上timedelta.days天,返回date對(duì)象。(1)

2.4.2.?date2 = date1 - timedelta

date1減去timedelta.days天,返回date對(duì)象。(1)

2.4.3.?timedelta = date1 - date2

date1減去date2的天數(shù),返回timedelta對(duì)象

此值完全精確且不會(huì)溢出。運(yùn)算后timedelta.seconds和timedelta.microseconds均為0

?

注釋:

1.timedelta.seconds和timedelta.microseconds會(huì)被忽略。如果date2.year運(yùn)算后小于MINYEAR或大于MAXYEAR則會(huì)引發(fā)OverflowError

?

2.4.4.?==, !=

可以跟任何類型的對(duì)象比較

2.4.5.?<, >, <=, >=

只能和date對(duì)象比較,否則引發(fā)TypeError。如果比較目標(biāo)具有timetuple(),也可能返回NotImplemented

# 時(shí)間早的被認(rèn)為小于時(shí)間晚的

# 在布爾運(yùn)算中,所有date對(duì)象都會(huì)被視為True

補(bǔ)充:NotImplemented內(nèi)置常量

# 雙目運(yùn)算也就是二元運(yùn)算

應(yīng)由雙目運(yùn)算特殊方法(如__eq__(), __lt__()等)或原地雙目運(yùn)算符特殊方法(賦值運(yùn)算特殊方法)返回的特殊值,用于表明運(yùn)算沒(méi)有針對(duì)其他類型的實(shí)現(xiàn)

它不應(yīng)在布爾運(yùn)算中被求值。它是types.NotImplementedType類型的唯一實(shí)例

當(dāng)雙目運(yùn)算特殊方法(或賦值運(yùn)算特殊方法)返回此常量時(shí),解析器將嘗試對(duì)另一種類型(或其他的一些回滾操作,取決于運(yùn)算符)的反射操作。如果所有嘗試都返回此常量,則解析器將引發(fā)適當(dāng)?shù)漠惓?/span>

示例1: ?# NotImplemented常量

運(yùn)行結(jié)果:

A類__gt__()執(zhí)行

B類__lt__()執(zhí)行

A類__lt__()執(zhí)行

B類__gt__()執(zhí)行

'<' not supported between instances of 'A' and 'B'

示例2: ?# date類

運(yùn)行結(jié)果:??# 其中一次運(yùn)行結(jié)果

2000-01-01 2050-05-05 2001-09-09 2000-03-21 2000-01-02 2000-01-03

2000-01-02 1999-12-31

80 days, 0:00:00

False True

True

2.5.?實(shí)例方法/特殊方法

2.5.1.?replace(year=self.year, month=self.month, day=self.day)

返回一個(gè)具有同樣值的date對(duì)象,除非通過(guò)任何關(guān)鍵字參數(shù)給出某些形參的新值

2.5.2.?timetuple()

返回一個(gè)time.struct_time(時(shí)間元組)

hours, minutes和seconds值均為0,且DST標(biāo)志為-1

此函數(shù)等價(jià)于:

time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1))

其中yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1是當(dāng)前年份中的日期序號(hào),1月1日的序號(hào)為1

2.5.3.?toordinal()

返回日期的預(yù)期格列高利歷序號(hào),其中公元1年1月1日的序號(hào)為1。fromordinal()的逆方法

2.5.4.?weekday()

返回一個(gè)整數(shù)代表星期幾,星期一為0,星期天為6

2.5.5.?isoweekday()

返回一個(gè)整數(shù)代表星期幾,星期一為1,星期天為7

2.5.6.?isocalendar()

返回一個(gè)三元組(ISO年份, ISO周序號(hào), ISO周日期)

# 在3.9版返回具名元組:year, week和weekday

ISO歷法是一種被廣泛使用的格列高利歷

ISO年由52或53個(gè)完整星期構(gòu)成,每個(gè)星期開(kāi)始于星期一結(jié)束于星期日。(格列高利)歷法的一年中第一個(gè)包含星期四的星期是一個(gè)ISO年的第一個(gè)星期。這被稱為1號(hào)星期,這個(gè)星期四所在的ISO年與其所在的格列高利年相同

例如,公元2000年第一個(gè)有星期四的是6號(hào),則6號(hào)所在的這個(gè)星期是ISO年的第一個(gè)星期(1號(hào)星期),即3號(hào)~9號(hào)。也就是ISO年2000年開(kāi)始于2000年1月3日星期一。相應(yīng)的,ISO年1999年結(jié)束于2000年1月2日

2.5.7.?isoformat()

返回一個(gè)ISO 8601格式Y(jié)YYY-MM-DD來(lái)表示日期的字符串

# 在3.11版之前是fromisoformat()的逆操作

2.5.8.?__str__()

對(duì)于date對(duì)象d,str(d)等價(jià)于d.isoformat()

2.5.9.?ctime()

返回一個(gè)表示日期的字符串

此方法等效于:

time.ctime(time.mktime(d.timetuple()))

# 在原生C ctime()函數(shù)(time.ctime()會(huì)發(fā)起調(diào)用該函數(shù),但date.ctime()則不會(huì))遵循C標(biāo)準(zhǔn)的平臺(tái)上

2.5.10.?strftime(format)

返回一個(gè)由顯式格式字符串所指明的代表日期的字符串。表示時(shí)、分或秒的格式代碼值將為0

# 格式化符號(hào)見(jiàn)time模塊strftime()函數(shù)


2.5.11.?__format__(format)

與date.strftime()相同。此方法使得date對(duì)象能進(jìn)行f-string格式化或str.format()格式化

示例:

運(yùn)行結(jié)果:

time.struct_time(tm_year=2000, tm_mon=1, tm_mday=3, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=3, tm_isdst=-1)

730122 2000-01-03

0 1

(2000, 1, 1) 2000-01-03

2000-01-03 2000-01-03 2000-01-03 2000-01-03

Mon Jan ?3 00:00:00 2000

3.?time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold)

time對(duì)象代表某日的(本地)時(shí)間,它獨(dú)立于任何特定日期,并可通過(guò)tzinfo對(duì)象來(lái)調(diào)整

所有參數(shù)都是可選的,除tzinfo默認(rèn)值為0

hour——小時(shí),0 <= hour < 24

minute——分鐘,0 <= minute < 60

second——秒,0 <= second < 60

microsecond——微秒,0 <= microsecond < 1000000

tzinfo——見(jiàn)tzinfo類??梢允荖one(默認(rèn)值),或tzinfo子類的實(shí)例

fold——用于在重復(fù)的時(shí)間段中消除邊界時(shí)間歧義。(當(dāng)夏令時(shí)結(jié)束時(shí)回?fù)軙r(shí)鐘或由于政治原因?qū)е庐?dāng)明時(shí)區(qū)的UTC時(shí)差減少就會(huì)出現(xiàn)重復(fù)的時(shí)間段。)取值0(1)表示兩個(gè)時(shí)刻早于(晚于)所代表的同一邊界時(shí)間,fold in [0, 1]

參數(shù)給出范圍外的值將引發(fā)ValueError

3.1.?類屬性

3.1.1.?min

最早可表示的時(shí)間,time(0, 0, 0, 0)

3.1.2.?max

最晚可表示的時(shí)間,time(23, 59, 59, 999999)

3.1.3.?resolution

兩個(gè)時(shí)間對(duì)象的最小間隔,timedelta(microseconds=1)

# time對(duì)象不支持算術(shù)運(yùn)算

3.2.?實(shí)例屬性(只讀)

3.2.1.?hour

小時(shí),值范圍range(24)

3.2.2.?minute

分鐘,值范圍range(60)

3.2.3.?second

秒,值范圍range(60)

3.2.4.?microsecond

微秒,值范圍range(1000000)

3.2.5.?tzinfo

作為tzinfo參數(shù)被傳給time構(gòu)造方法的對(duì)象,沒(méi)傳入值則為None

3.2.6.?fold

值范圍[0, 1]

3.3.?比較運(yùn)算

time對(duì)象支持time與time的比較,當(dāng)a時(shí)間在b之前則認(rèn)為a小于b

簡(jiǎn)單型比較感知型會(huì)引發(fā)TypeError,在相等比較中簡(jiǎn)單型永遠(yuǎn)不等于感知型

感知型和感知型比較分以下兩種情況:

1.具有相同的tzinfo屬性,則該屬性會(huì)被忽略并對(duì)基本時(shí)間值比較

2.具有不同的tzinfo屬性,則兩個(gè)比較方將首先減去它們的UTC時(shí)差(從self.utcoffset()獲?。﹣?lái)進(jìn)行調(diào)整

當(dāng)time對(duì)象與不同類型對(duì)象比較時(shí)會(huì)引發(fā)TypeError,除非比較運(yùn)算符是==或!=(這兩種情況會(huì)分別返回False或True)

# 在布爾運(yùn)算中,所有time對(duì)象都會(huì)被視為True

3.4.?方法

3.4.1.?類方法fromisoformat(time_string)

返回對(duì)應(yīng)于time.isoformat()所提供的某種time_string格式的time。支持以下格式的字符串:

HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]

# 具體見(jiàn)下個(gè)方法

# 在3.11版支持任何有效的ISO 8601格式時(shí)間字符串

3.4.2.?isoformat(timespec='auto')

返回表示為下列ISO 8601格式之一的時(shí)間字符串:

如果utcoffset()返回None:

1.如果microsecond為0,HH:MM:SS

2.如果microsecond不為0,HH:MM:SS.ffffff

如果utcoffset()不返回None:

1.如果microsecond為0,HH:MM:SS+HH:MM[:SS[.ffffff]]

2.如果microsecond不為0,HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]

timespec——要包含的額外時(shí)間組件(默認(rèn)為'auto'),可選擇以下的值:

'auto':如果microsecond為0,則與'seconds'相同,否則與'microseconds'相同

'hours':以兩個(gè)數(shù)碼HH格式包含hour

'minutes':以HH:MM格式包含hour和minute

'seconds':以HH:MM:SS格式包含hour, minute和second

'milliseconds':以HH:MM:SS.sss格式包含完整時(shí)間,但將秒值的小數(shù)部分(微秒)截?cái)嘀梁撩??# 截?cái)喽皇巧崛?/span>

'microseconds':以HH:MM:SS.ffffff格式包含完整時(shí)間

對(duì)于無(wú)效的timespec參數(shù)將引發(fā)ValueError


3.4.3.?replace(hour=self.hour, minute=self.minute, second=self.second,
microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)

返回一個(gè)具有同樣值的time對(duì)象,除非通過(guò)任何關(guān)鍵字參數(shù)給出某些形參的新值

# 注意可以指定tzinfo=None從一個(gè)感知型time對(duì)象創(chuàng)建一個(gè)簡(jiǎn)單型time對(duì)象,而不必轉(zhuǎn)換時(shí)間數(shù)據(jù)

3.4.4.?utcoffset()

3.4.5.?dst()

3.4.6.?tzname()

如果tzinfo為None,則返回None;否則返回self.tzinfo.同名方法(None),如果后者不返回None或者一個(gè)幅度小于一天的timedelta對(duì)象(在tzname()方法中是不返回None或者一個(gè)字符串對(duì)象)則引發(fā)異常

# 具體見(jiàn)tzinfo類

3.4.7.?__str__()

對(duì)于time對(duì)象t,str(t)等價(jià)于t.isoformat()

3.4.8.?strftime(format)

返回一個(gè)由顯式格式字符串所指明的代表時(shí)間的字符串

# 格式化符號(hào)見(jiàn)time模塊strftime()函數(shù)

3.4.9.?__format__(format)

與time.strftime()相同。此方法使得time對(duì)象能進(jìn)行f-string格式化或str.format()格式化

示例:

運(yùn)行結(jié)果:

12:30:30.678678 11:00:00 12:00:00+08:00 12:00:00+07:00

True True False

12:30 12:30:30.678

8:00:00 None UTC+08:00

12/00/00/+0800

4.?datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

datetime對(duì)象是包含來(lái)自date對(duì)象和time對(duì)象的所有信息的單一對(duì)象。datetime類是date類的子類

與date對(duì)象一樣,datetime假定當(dāng)前的格列高利歷向前后兩個(gè)方向無(wú)限延伸;與time對(duì)象一樣,datetime假定每一天恰好有3600*24秒

year, month和day參數(shù)是必須的,參數(shù)說(shuō)明見(jiàn)date類和time類的相應(yīng)參數(shù)

參數(shù)給出范圍外的值將引發(fā)ValueError

4.1.?類屬性

4.1.1.?min

最早可表示的datetime對(duì)象,datetime(MINYEAR, 1, 1, tzinfo=None)

4.1.2.?max

最晚可表示的datetime對(duì)象,datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None)

4.1.3.?resolution

兩個(gè)datetime對(duì)象的最小間隔,timedelta(microseconds=1)

4.2.?實(shí)例屬性(只讀)

實(shí)例屬性對(duì)應(yīng)構(gòu)造方法中的每個(gè)參數(shù)

4.3.?支持的運(yùn)算

4.3.1.?datetime2 = datetime1 + timedelta

4.3.2.?datetime2 = datetime1 - timedelta

4.3.3.?timedelta = datetime1 - datetime2

4.3.4.?比較運(yùn)算

支持的運(yùn)算與date類支持的運(yùn)算大體相同,區(qū)別在不止是計(jì)算日期且有簡(jiǎn)單型和感知型間的計(jì)算:

·?對(duì)感知型的計(jì)算不會(huì)進(jìn)行時(shí)區(qū)調(diào)整

·?從一個(gè)datetime減去一個(gè)datetime的兩個(gè)操作數(shù)均為簡(jiǎn)單型或感知型,感知型之間的計(jì)算類似于time中的比較運(yùn)算:具有相同tzinfo屬性會(huì)忽略此屬性,具有不同tzinfo屬性會(huì)將兩個(gè)datetime先轉(zhuǎn)換為簡(jiǎn)單型UTC日期時(shí)間再計(jì)算

·?比較運(yùn)算參考date類和time類的比較運(yùn)算

4.4.?類方法

4.4.1.?today()

返回表示當(dāng)前地方時(shí)的datetime對(duì)象,其中tzinfo為None。返回簡(jiǎn)單型的datetime對(duì)象

等價(jià)于:

datetime.fromtimestamp(time.time())

或不帶tz形參的now()

4.4.2.?now(tz=None)

返回表示當(dāng)?shù)氐胤綍r(shí)的datetime對(duì)象。當(dāng)tz為None時(shí)返回簡(jiǎn)單型的datetime對(duì)象,不為None時(shí)返回感知型的datetime對(duì)象

tz——當(dāng)?shù)厝掌诤蜁r(shí)間轉(zhuǎn)換到的tz時(shí)區(qū)。如果為None(默認(rèn)值),類似于today();如果不為None,則必須是tzinfo子類的一個(gè)實(shí)例

# 該方法會(huì)在可能的情況下提供比通過(guò)time.time()時(shí)間戳所獲時(shí)間值更高的精度

4.4.3.?utcnow()

返回表示當(dāng)前UTC時(shí)間的datetime對(duì)象,其中tzinfo為None。返回簡(jiǎn)單型的datetime對(duì)象

# 推薦使用datetime.now(timezone.utc)來(lái)創(chuàng)建感知型的當(dāng)前UTC時(shí)間的datetime對(duì)象

4.4.4.?fromtimestamp(timestamp, tz=None)

返回對(duì)應(yīng)于時(shí)間戳timestamp的本地日期和時(shí)間。當(dāng)tz為None時(shí)返回簡(jiǎn)單型的datetime對(duì)象,不為None時(shí)返回感知型的datetime對(duì)象

tz——同now()

如果時(shí)間戳數(shù)值超出所在平臺(tái)C localtime()函數(shù)支持的范圍則引發(fā)OverflowError,在localtime()出錯(cuò)時(shí)會(huì)引發(fā)OSError。在時(shí)間戳概念包含閏秒的非POSIX系統(tǒng)上,閏秒會(huì)被忽略


4.4.5.?utcfromtimestamp(timestamp)

返回對(duì)應(yīng)于時(shí)間戳timestamp的UTC日期和時(shí)間,其中tzinfo值為None。返回簡(jiǎn)單型的datetime對(duì)象

如果時(shí)間戳數(shù)值超出所在平臺(tái)C gmtime()函數(shù)支持的范圍則引發(fā)OverflowError,在gmtime()出錯(cuò)時(shí)會(huì)引發(fā)OSError

在POSIX兼容的平臺(tái)上,它等價(jià)于以下表達(dá)式:

datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)

# 這種形式總是支持完整年份范圍:[MINYEAR, MAXYEAR]

# 推薦使用fromtimestamp(timestamp, tz=timezone.utc)來(lái)創(chuàng)建感知型的特定UTC時(shí)間戳的datetime對(duì)象

4.4.6.?fromordinal(ordinal)

類似date.fromordinal(),返回對(duì)應(yīng)于預(yù)期格列高利歷序號(hào)的datetime對(duì)象

結(jié)果的hour, minute, second和microsecond值均為0,并且tzinfo值為None。返回簡(jiǎn)單型的datetime對(duì)象

4.4.7.?combine(date, time[, tzinfo])

返回一個(gè)新的datetime對(duì)象,對(duì)象的日期部分等于給定的date對(duì)象的值,而時(shí)間部分等于給定的time對(duì)象的值。如果date是一個(gè)datetime對(duì)象,它的時(shí)間部分和tzinfo屬性會(huì)被忽略

tzinfo——如果給出,則使用給出值設(shè)置結(jié)果的tzinfo屬性,否則使用time參數(shù)的tzinfo屬性

對(duì)于任意datetime對(duì)象d,d == datetime.combine(d.date(), d.time(), d.tzinfo)

4.4.8.?fromisoformat(date_string)

返回對(duì)應(yīng)于date.isoformat()和datetime.isoformat()所提供的某種date_string格式的datetime。支持以下格式的字符串:

YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]

其中*可以匹配任意的單個(gè)字符

# 在3.11版支持任何有效的ISO 8601格式日期時(shí)間字符串

4.4.9.?fromisocalendar(year, week, day)

返回指定year, week和day所對(duì)應(yīng)ISO歷法日期的datetime,這是datetime.isocalendar()實(shí)例方法的逆操作

該datetime對(duì)象的非日期部分將使用其標(biāo)準(zhǔn)默認(rèn)值來(lái)填充

4.4.10.?strptime(date_string, format)

返回一個(gè)對(duì)應(yīng)于date_string,根據(jù)format進(jìn)行解析得到的datetime對(duì)象

默認(rèn)值為1900-01-01T00:00:00.000。任何未在格式字符串中指定的部分都將從默認(rèn)值中提取

等價(jià)于:

datetime(*(time.strptime(date_string, format)[0:6]))

# 無(wú)法解析引發(fā)ValueError

# 格式化符號(hào)見(jiàn)time模塊strftime()函數(shù)

示例:

運(yùn)行結(jié)果: ?# 其中一次運(yùn)行結(jié)果

2000-01-01 12:00:00 2000-01-01 08:00:00+08:00 2000-01-03 00:00:00

2000-01-01 16:00:00+08:00 2000-01-01 00:00:00+08:00

1 day, 12:00:00

2000-01-01 12:30:00+07:00

2050-05-05 05:55:55.535000

2050-05-05 05:55:55.535000+08:00

2050-05-04 21:55:55.535000

4.5.?實(shí)例方法/特殊方法

4.5.1.?date()

返回具有同樣year, month和day值的date對(duì)象

4.5.2.?time()

返回具有同樣hour, minute, second, microsecond和fold值的time對(duì)象。tzinfo值為None

4.5.3.?timetz()

返回具有同樣hour, minute, second, microsecond, fold和tzinfo值的time對(duì)象

4.5.4.?replace(year=self.year, month=self.month, day=self.day, hour=self.hour,
minute=self.minute, second=self.second, microsecond=self.microsecond,
tzinfo=self.tzinfo, *, fold=0)

返回一個(gè)具有同樣值的datetime對(duì)象,除非通過(guò)任何關(guān)鍵字參數(shù)給出某些形參的新值

# 注意可以指定tzinfo=None從一個(gè)感知型datetime對(duì)象創(chuàng)建一個(gè)簡(jiǎn)單型datetime對(duì)象,而不必轉(zhuǎn)換日期和時(shí)間數(shù)據(jù)

4.5.5.?utcoffset()

4.5.6.?dst()

4.5.7.?tzname()

同time類的同名方法

4.5.8.?astimezone(tz=None)

返回一個(gè)具有新的tzinfo屬性tz的datetime對(duì)象,并會(huì)調(diào)整日期和時(shí)間數(shù)據(jù)使得結(jié)果對(duì)應(yīng)的UTC時(shí)間與調(diào)用實(shí)例self對(duì)應(yīng)的UTC時(shí)間相同,但結(jié)果的時(shí)區(qū)為tz時(shí)區(qū)的本地時(shí)間。如果self為簡(jiǎn)單型,則會(huì)被假定為基于系統(tǒng)時(shí)區(qū)表示的時(shí)間

tz——如果為None(默認(rèn)值),則會(huì)假定目標(biāo)時(shí)區(qū)為系統(tǒng)的本地時(shí)區(qū)。時(shí)區(qū)名稱和時(shí)差值將從OS獲??;如果不為None,則必須是一個(gè)tzinfo子類的實(shí)例,并且其utcoffset()和dst()方法不可返回None

# 只要附加一個(gè)時(shí)區(qū)對(duì)象tz到datetime對(duì)象dt而不調(diào)整日期和時(shí)間數(shù)據(jù)請(qǐng)使用dt.replace(tzinfo=tz)。只要從感知型datetime對(duì)象dt去掉時(shí)區(qū)對(duì)象請(qǐng)使用dt.replace(tzinfo=None)

# 注意默認(rèn)的tzinfo.fromutc()方法在tzinfo的子類中可以被重載,從而影響astimezone()的返回結(jié)果


忽略出錯(cuò)的情況,此函數(shù)的行為類似于:

def astimezone(self, tz):

????if self.tzinfo is tz:

????????return self

????# 將self轉(zhuǎn)換為UTC時(shí)間,并附加新的時(shí)區(qū)對(duì)象

????utc = (self - self.utcoffset()).replace(tzinfo=tz)

????# 將UTC時(shí)間轉(zhuǎn)換為tz時(shí)區(qū)的本地時(shí)間

????return tz.fromutc(utc)

4.5.9.?timetuple()

返回一個(gè)time.struct_time(時(shí)間元組)

此函數(shù)等價(jià)于:

time.struct_time((d.year, d.month, d.day,

??????????????????d.hour, d.minute, d.second,

??????????????????d.weekday(), yday, dst))

其中yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1是當(dāng)前年份中的日期序號(hào),1月1日的序號(hào)為1

結(jié)果的tm_isdst標(biāo)志的設(shè)定根據(jù)dst()方法:

·?如果tzinfo為None或dst()返回None,則設(shè)為-1

·?否則如果dst()返回一個(gè)非零值,則設(shè)為1

·?否則設(shè)為0

4.5.10.?utctimetuple()

如果datetime實(shí)例d為簡(jiǎn)單型,類似于d.timetuple(),但tm_isdst強(qiáng)制設(shè)為0

# DST對(duì)于UTC時(shí)間永遠(yuǎn)無(wú)效

如果d為感知型,d會(huì)通過(guò)減去d.utcoffset()來(lái)標(biāo)準(zhǔn)化為UTC時(shí)間,并返回該標(biāo)準(zhǔn)化時(shí)間所對(duì)應(yīng)的time.struct_time。tm_isdst會(huì)強(qiáng)制設(shè)為0

# 注意如果d.year為MINYEAR或MAXYEAR并且UTC調(diào)整超出一年的邊界則可能引發(fā)OverflowError

# 最好使用感知型日期時(shí)間來(lái)表示UTC時(shí)間

使用datetime.replace(tzinfo=timezone.utc)可以使一個(gè)表示UTC的簡(jiǎn)單型改為感知型

4.5.11.?toordinal()

返回日期的預(yù)期格列高利歷序號(hào)。與self.date().toordinal()相同

4.5.12.?timestamp()

返回對(duì)應(yīng)于datetime實(shí)例的時(shí)間戳

簡(jiǎn)單型datetime實(shí)例會(huì)假定為代表本地時(shí)間;感知型datetime實(shí)例返回值的計(jì)算方式為:

(dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()

# 時(shí)間戳0秒epoch是UTC時(shí)間1970年1月1日00:00:00

# 此方法依賴于平臺(tái)C mktime()函數(shù)來(lái)執(zhí)行轉(zhuǎn)換。由于在許多平臺(tái)上datetime支持的范圍比mktime()更廣,對(duì)于極其遙遠(yuǎn)的過(guò)去或未來(lái)的日期時(shí)間此方法可能引發(fā)OverflowError或OSError

4.5.13.?weekday()

返回一個(gè)整數(shù)代表星期幾,星期一為0,星期天為6。相當(dāng)于self.date().weekday()

4.5.14.?isoweekday()

返回一個(gè)整數(shù)代表星期幾,星期一為1,星期天為7。相當(dāng)于self.date().isoweekday()

4.5.15.?isocalendar()

返回一個(gè)三元組(ISO年份, ISO周序號(hào), ISO周日期)。相當(dāng)于self.date().isocalendar()

# 在3.9版返回具名元組:year, week和weekday


4.5.16.?isoformat(sep='T', timespec='auto')

返回一個(gè)以ISO 8601格式表示的日期和時(shí)間字符串

sep——單個(gè)分隔字符,會(huì)被放在結(jié)果的日期和時(shí)間兩部分之間,默認(rèn)為'T'

返回格式和timespec參數(shù)類似time.isoformat()方法,區(qū)別是在結(jié)果字符串前面加上:YYYY-MM-DDT

4.5.17.?__str__()

對(duì)于datetime對(duì)象d,str(d)等價(jià)于d.isoformat(' ')

4.5.18.?ctime()

返回一個(gè)表示日期和時(shí)間的字符串

無(wú)論輸入的是感知型還是簡(jiǎn)單型,輸出字符串都不包含時(shí)區(qū)信息

此方法等效于:

time.ctime(time.mktime(d.timetuple()))

# 在原生C ctime()函數(shù)(time.ctime()會(huì)發(fā)起調(diào)用該函數(shù),但datetime.ctime()則不會(huì))遵循C標(biāo)準(zhǔn)的平臺(tái)上

4.5.19.?strftime(format)

返回一個(gè)由顯式格式字符串所指明的代表日期和時(shí)間的字符串

# 格式化符號(hào)見(jiàn)time模塊strftime()函數(shù)

4.5.20.?__format__(format)

與datetime.strftime()相同。此方法使得datetime對(duì)象能進(jìn)行f-string格式化或str.format()格式化

示例:

運(yùn)行結(jié)果:

2000-01-01

12:00:00

12:00:00+08:00

2000-01-01 12:00:00

2000-01-01 04:00:00+00:00

time.struct_time(tm_year=2000, tm_mon=1, tm_mday=1, tm_hour=4, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=1, tm_isdst=0)

2000-01-01T12:00:00+08:00

2000-01-01/12:00:00+08:00

2000-01-01/12+08:00

補(bǔ)充:strftime()和strptime()格式化符號(hào)與time模塊中的不同和補(bǔ)充

%Y:在用strptime()方法解析<1000的年份時(shí),必須加零填充為4位數(shù)字寬度

%S:不支持閏秒,所以范圍是[00, 59]

%f:十進(jìn)制數(shù)[000000, 999999]表示的微秒,在strptime()方法中使用時(shí),可接受一至六個(gè)數(shù)碼及左邊的零填充

%z:UTC偏移量,格式為±HHMM[SS[.ffffff]](簡(jiǎn)單型對(duì)象則為空字符串)

%Z:時(shí)區(qū)名稱(簡(jiǎn)單型對(duì)象則為空字符串)

# 在3.12版添加了%:z,是UTC偏移量,格式為±HH:MM[:SS[.ffffff]]

# %z當(dāng)時(shí)差為整數(shù)秒時(shí)ffffff部分將被省略,當(dāng)時(shí)差為整數(shù)分鐘時(shí)ffffff和SS部分都將被省略

%G和%V:使用時(shí)必須%G、%V、(%A, %a, %w, %u)一起使用

在strptime()方法使用時(shí),前導(dǎo)零在格式%d, %m, %H, %I, %M, %S, %j, %U, %W和%V中,格式%y需要有前導(dǎo)零

# 如果在strptime()中多個(gè)格式化符號(hào)緊跟在一起,則傳入數(shù)字會(huì)先滿足每個(gè)格式化符號(hào)至少需要的數(shù)字,再?gòu)淖蟮接乙来螡M足(見(jiàn)示例)

示例:

運(yùn)行結(jié)果:

+060838.400000 UTC+06:08:38.400000

0002-01-01 00:00:00.314159 / 2000-01-04 00:00:00

1234-05-06 00:00:00 / 4567-08-09 00:00:00.012300

5.?tzinfo抽象基類

此類不應(yīng)該被直接實(shí)例化。需定義子類來(lái)捕獲有關(guān)特定時(shí)區(qū)的信息

# 對(duì)于序列化操作有特殊要求:一個(gè)tzinfo子類必須具有可不帶參數(shù)調(diào)用的__init__()方法,否則它雖然可以被pickled,但可能無(wú)法再次unpickled

子類可能需實(shí)現(xiàn)以下方法。具體實(shí)現(xiàn)的方法取決于感知型datetime對(duì)象如何使用它

# 下列方法只簡(jiǎn)略介紹,具體見(jiàn)官方文檔

5.1.?utcoffset(dt)

將本地時(shí)間與UTC時(shí)差返回為一個(gè)timedelta對(duì)象,如果本地時(shí)區(qū)在UTC以東則為正值。 如果本地時(shí)區(qū)在UTC以西則為負(fù)值

表示與UTC的總計(jì)時(shí)差(代表時(shí)區(qū)和DST調(diào)整的和)。UTC時(shí)差不確定則返回None。UTC時(shí)差的幅度必須小于1天

如果utcoffset()返回值不為None,則dst()也不應(yīng)返回None

默認(rèn)實(shí)現(xiàn)會(huì)引發(fā)NotImplementedError

5.2.?dst(dt)

將DST調(diào)整返回為一個(gè)timedelta對(duì)象

如果DST信息位置則返回None;未啟用則返回timedelta(0);啟用則將差值作為一個(gè)timedelta對(duì)象返回

默認(rèn)實(shí)現(xiàn)會(huì)引發(fā)NotImplementedError


5.3.?tzname(dt)

將對(duì)應(yīng)于datetime對(duì)象dt的時(shí)區(qū)名稱作為字符串返回,未知返回None

默認(rèn)實(shí)現(xiàn)會(huì)引發(fā)NotImplementedError

5.4.?fromutc(dt)

在調(diào)用datetime.astimezone()時(shí)調(diào)整日期和時(shí)間數(shù)據(jù)

默認(rèn)實(shí)現(xiàn)見(jiàn)官方文檔

# 這些方法會(huì)被datetime或time對(duì)象調(diào)用。datetime對(duì)象會(huì)將自身作為傳入?yún)?shù),而time對(duì)象會(huì)將None作為傳入?yún)?shù)

6.?timezone(offset, name=None)

timezone類是tzinfo的子類,它的每個(gè)實(shí)例都代表一個(gè)以與UTC的固定時(shí)差來(lái)定義的時(shí)區(qū)。此類的對(duì)象不能代表某些特殊地點(diǎn)的時(shí)區(qū)信息(那些一年不同日期使用不同時(shí)差之類的地點(diǎn))

offset——必須指定為一個(gè)timedelta對(duì)象,表示本地時(shí)間與UTC的時(shí)差。它必須嚴(yán)格限制于-timedelta(hours=24)和timedelta(hours=24)之間,否則會(huì)引發(fā)ValueError

name——如果指定則必須是一個(gè)字符串,它將被用作datetime.tzname()的返回值

6.1.?utc類屬性

UTC時(shí)區(qū),timezone(timedelta(0))

6.2.?utcoffset(dt)

返回當(dāng)timezone實(shí)例被構(gòu)造時(shí)指定的固定值offset。dt參數(shù)會(huì)被忽略。返回值是一個(gè)timedelta實(shí)例,其值等于本地時(shí)間與UTC之間的時(shí)差

6.3.?tzname(dt)

返回當(dāng)timezone實(shí)例被構(gòu)造時(shí)指定的固定值name

如果在構(gòu)造時(shí)沒(méi)有提供name,則根據(jù)offset值按以下規(guī)則生成:

·?如果offset為timedelta(0),則名稱為"UTC"

·?否則為字符串UTC±HH:MM,其中±是offset的正負(fù)號(hào),HH和MM分別為表示offset.hours和offset.minutes的兩個(gè)數(shù)碼

6.4.?dst(dt)

總是返回None

6.5.?fromutc(dt)

返回dt + offset。dt參數(shù)必須是一個(gè)感知型datetime實(shí)例,且dt.tzinfo是self

6.6.?__str__()

對(duì)于timezone對(duì)象tz,str(tz)等價(jià)于tz.tzname(None)






































Python模塊time, calendar, datetime的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
海盐县| 修文县| 同仁县| 灌云县| 招远市| 且末县| 揭东县| 梅河口市| 公主岭市| 武夷山市| 青铜峡市| 门源| 静安区| 四川省| 四子王旗| 安阳市| 卓资县| 柳江县| 中超| 乌什县| 冀州市| 龙游县| 普格县| 正蓝旗| 泸西县| 独山县| 天门市| 蕲春县| 峨山| 罗甸县| 永仁县| 临海市| 宣武区| 老河口市| 抚州市| 宣恩县| 宁晋县| 阳江市| 新河县| 依安县| 青川县|