引言 :
datetime子產品提供了用于處理日期和時間的類和對應的方法,一般用于處理年、月、日、時、分、秒的統計和計算等需求。在支援日期時間數學運算的同時,實作的關注點更着重于如何能夠更有效地解析其屬性用于格式化輸出和資料操作。
學習該子產品,首先要有一個概念:日期和時間,要不然會混亂,這裡進行狹義的了解即可:日期是日期,時間是時間,日常生活中有時候并沒有很好的去區分。
日期:年月日,如 20210612
時間:時分秒,如 20:45:50
Python标準庫中包含日期(date)和時間(time)的資料類型,還有月曆方面的功能。要比較系統的學習該子產品,需要了解下面的兩個概念。
UTC(全球标準時間):是全球範圍内計時的科學标準,它基于精心維護的原子鐘,在全球範圍内精确到微秒,由于英文(CUT)和法文(TUC)的縮寫不同,作為妥協,簡稱UTC。作為全球最精确的時間系統,天文學家、航海家、“太空跟蹤網”(DSN) 以及其他科學性學科都使用它,它的參考點是英國格林威治标準時間(GMT):地球本初子午線的午夜,也是 UTC 的午夜 (00:00:00.000000)。本地時間是根據地球上不同時區所處的位置調整 UTC 得來的,比如當美國加州的太平洋時間為正午 12:00:00 時,UTC 為 20:00:00。
夏令時(DST):表示為了節約能源, 人為規定時間的意思。也叫夏時制,夏時令(Daylight Saving Time:DST),又稱"日光節約時制"和"夏令時間”,在這一制度實行期間所采用的統一時間稱為“夏令時間”。一般在天亮早的夏季人為将時間調快一小時,可以使人早起早睡,減少照明量,以充分利用光照資源,進而節約照明用電。各個采納夏時制的國家具體規定不同。全世界有近110個國家每年要實行夏令時。
感覺型”和“簡單型”對象:日期和時間對象可以根據它們是否包含時區資訊而分為“感覺型”和“簡單型”兩類。充分掌握應用性算法和政治性時間調整資訊例如時區和夏令時的情況下,一個 感覺型 對象就能相對于其他感覺型對象來精确定位自身時間點。感覺型對象是用來表示一個沒有解釋空間的固定時間點。簡單型對象沒有包含足夠多的資訊來無歧義地相對于其他 date/time 對象來定位自身時間點。
時間戳:Unix時間戳是從1970年1月1日(UTC/GMT的午夜)開始所經過的秒數,不考慮閏秒。Unix時間戳(英文為Unix epoch, Unix time, POSIX time 或 Unix timestamp)
一、datetime子產品概念
Python内置的時間子產品datetime包含下面的子產品包含六個類和兩個常數,提供了用于處理日期和時間的類和對應的方法,一般用于處理年、月、日、時、分、秒的統計和計算等需求,且這些類型的對象都是不可變的。最常用的是datetime.datetime,有些人誤以為就一個子產品,其實是datetime子產品下的datetime類。
常量、類或方法名 | 注解 |
datetime.date | 一個理想化的簡單型日期,它假設當今的公曆在過去和未來永遠有效。屬性包含: year, month, day。 |
datetime.time | 一個獨立于任何特定日期的理想化時間,它假設每一天都恰好等于 24*60*60 秒。這裡沒有“閏秒”的概念) 包含屬性:hour、minute、second、microsecond 、tzinfo。 |
datetime.datetime | 是日期和時間的結合,屬性包含year、month、day、hour、minute、second、 microsecond、 tzinfo.表示日期時間 |
datetime.timedelta | 表示兩個 date 對象或者 time 對象,或者 datetime 對象之間的時間間隔,精确到微秒。 |
datetime.tzinfo | 一個描述時區資訊對象的抽象基類。用來給datetime和time類提供自定義的時間調整概念(例如處理時區和/或夏令時)。 |
datetime.timezone | 一個實作了tzinfo抽象基類的子類,用于表示相對于世界标準時間(UTC)的偏移量。 |
datetime.MINYEAR | 常量,表示年份允許的最小值為1 |
datetime.MAXYEAR | 常量,表示年份允許的最大值為9999 |
二、datetime.date類
1、date類介紹
作用:date類用來處理日期資訊
文法:date類是datetime的内嵌類,執行個體化文法:datetime.date(year, month, day)
參數:year年份、month月份及day日期,所有參數都是必要的, 參數必須是在下面範圍内的整數
MINYEAR <= year <= MAXYEAR
1 <= month <= 12
1 <= day<= 給定年月對應的天數
如果參數不在這些範圍内,則抛出 ValueError 異常。
import datetime
t = datetime.date(2019,8,26)
print(type(t))
print(t.day,t.month,t.year)
# <class 'datetime.date'>26 8 2019
通過内置函數dir,可以檢視date類的所有方法和屬性
from datetime import date
print(dir(date))
['ctime', 'day', 'fromisocalendar', 'fromisoformat', 'fromordinal', 'fromtimestamp', 'isocalendar', 'isoformat', 'isoweekday', 'max', 'min', 'month', 'replace', 'resolution', 'strftime', 'timetuple', 'today', 'toordinal', 'weekday', 'year']
2、類方法
date.today()
作用:傳回目前的本地日期,等價于date.fromtimestamp(time.time())。
from datetime import date
date.today()
datetime.date(2021, 7, 4)
date.fromtimestamp()
作用:傳回對應于POSIX時間戳的當地時間,例如 time.time() 傳回的就是時間戳。這可能引發 OverflowError,如果時間戳數值超出所在平台 C localtime() 函數的支援範圍的話,并且會在 localtime() 出錯時引發 OSError。通常該數值會被限制在 1970 年至 2038 年之間。請注意在時間戳概念包含閏秒的非 POSIX 系統上,閏秒會被 fromtimestamp() 所忽略。
在 3.3 版更改: 引發 OverflowError 而不是 ValueError,如果時間戳數值超出所在平台 C localtime() 函數的支援範圍的話,并會在 localtime() 出錯時引發 OSError 而不是 ValueError。
用法:date.fromtimestamp(timestamp)
-
from datetime import date date.fromtimestamp(1339119900000/1e3).strftime('%Y-%m-%d %H:%M') '2012-06-07 00:00' date.fromtimestamp(1339120800000/1e3).strftime('%Y-%m-%d %H:%M') '2012-06-07 00:00'
注意: unix時間戳是從1970年1月1日(UTC/GMT的午夜)開始所經過的秒數,不考慮閏秒。
date.fromordinal()
作用:傳回對應于預期格列高利曆序号的日期,其中公元 1 年 1 月 1 晶的序号為 1。
用法:date.fromordinal(ordinal)
-
from datetime import date d = date.fromordinal(730920) # 730920th day after 1. 1. 0001ddatetime.date(2002, 3, 11)
date.fromisoformat()
作用:傳回一個對應于以 YYYY-MM-DD 格式給出的 date_string 的 date 對象
用法:date.fromisoformat(date_string)
-
from datetime import date date.fromisoformat('2019-12-04') datetime.date(2019, 12, 4)
這是 date.isoformat() 的逆操作。它隻支援 YYYY-MM-DD 格式。更通用的要用strptime
-
d.isoformat()
-
'2002-03-11'
date.fromisocalendar()
作用:傳回指定 year, week 和 day 所對應 ISO 曆法日期的 date。這是函數 date.isocalendar() 的逆操作。
用法:date.fromisocalendar(year, week, day)
今年的42周第三天是10月20号
-
date.fromisocalendar(2021, 42, 3)
-
datetime.date(2021, 10, 20)
3、類屬性
date.min
最小的日期 date(MINYEAR, 1, 1) 。
from datetime import date
date.min
datetime.date(1, 1, 1)
date.max
最大的日期 ,date(MAXYEAR, 12, 31)。
from datetime import date
date.max
datetime.date(9999, 12, 31)
date.resolution
兩個日期對象的最小間隔,timedelta(days=1)。
from datetime import date
date.resolution
datetime.timedelta(days=1)
date.year
在 MINYEAR 和 MAXYEAR 之間,包含邊界。
from datetime import date
d = date.today()#生成一個date對象
d
datetime.date(2021, 7, 5)
d.year
2021
date.month
1 至 12(含)
-
#接上述案例
d.month
7
date.day
傳回1到指定年月的天數間的數字。
3、執行個體方法
date.replace()
作用:傳回一個具有同樣值的日期,除非通過任何關鍵字參數給出了某些形參的新值。
用法:date.replace(year=self.year, month=self.month, day=self.day)
from datetime import date
d = date(2002, 12, 31)
d.replace(day=26)
datetime.date(2002, 12, 26)
date.timetuple()
作用:傳回一個 time.struct_time,即 time.localtime() 所傳回的類型。hours, minutes 和 seconds 值均為 0,且 DST 旗标值為 -1。
用法:date.timetuple(d)
d = date(2002, 12, 31)
date.timetuple(d)
time.struct_time(tm_year=2002, tm_mon=12, tm_mday=31,
tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=365,
tm_isdst=-1)
date.toordinal()
作用:傳回日期的預期格列高利曆序号,其中公元 1 年 1 月 1 日的序号為 1。對于任意 date 對象 d,date.fromordinal(d.toordinal()) == d。
d = date(1, 1, 1)
d.toordinal()
1
d = date(2002, 12, 31)
d.toordinal()
731215
date.fromordinal(d.toordinal())
datetime.date(2002, 12, 31)
date.weekday()
作用:傳回一個整數代表星期幾,星期一為0,星期天為6。
date(2002, 12, 4).weekday()
2
date.isoweekday()
作用:傳回一個整數代表星期幾,星期一為1,星期天為7。
date(2002, 12, 4).isoweekday()
3
date.isocalendar()
作用:傳回一個由三部分組成的 named tuple 對象: year, week 和 weekday。
ISO 曆法是一種被廣泛使用的格列高利曆。ISO 年由 52 或 53 個完整星期構成,每個星期開始于星期一結束于星期日。一個 ISO 年的第一個星期就是(格列高利)曆法的一年中第一個包含星期四的星期。這被稱為 1 号星期,這個星期四所在的 ISO 年與其所在的格列高利年相同。
例如,2004 年的第一天是星期四,是以 ISO 2004 年的第一個星期開始于 2003 年 12 月 29 日星期一,結束于 2004 年 1 月 4 日星期日.
-
from datetime import date
date(2003, 12, 29).isocalendar()
(2004, 1, 1) # 舊版本
datetime.IsoCalendarDate(year=2004, week=1, weekday=1) # 新版本
date(2004, 1, 4).isocalendar()
datetime.IsoCalendarDate(year=2004, week=1, weekday=7)
在 3.9 版更改: 結果由元組改為 named tuple。
date.isoformat()
作用:傳回一個以 ISO 8601 格式 YYYY-MM-DD 來表示日期的字元串
用法:date.isoformat(d)
-
from datetime import date
date(2021, 10, 1).isoformat()
'2021-10-01'
這是 date.fromisoformat() 的逆操作。date.__str__()
作用:對于日期對象 d, str(d) 等價于 d.isoformat() 。
用法:date.__str__(d)
from datetime import date
date(2021, 10, 1).__str__()
'2021-10-01'
str(date(2021, 10, 1))
'2021-10-01'
date.ctime()
作用:傳回一個表示日期的字元串,在原生 C ctime() 函數 (time.ctime() 會發起調用該函數,但 date.ctime() 則不會) 遵循 C 标準的平台上。
-
from datetime import date
date(2021, 10, 1).ctime()
'Fri Oct 1 00:00:00 2021'
d.ctime() 等效于 time.ctime(time.mktime(d.timetuple()))
-
d=date(2021, 10, 1)
import time
time.ctime(time.mktime(d.timetuple()))
'Fri Oct 1 00:00:00 2021'
date.strftime()
作用:翻譯下就是 str from time,将給定格式的日期時間對象轉換為字元串。日期時間對象=>字元串,控制日期時間對象的輸出格式,date、datetime、time對象都支援strftime(format) 方法,可用來建立由一個顯式格式字元串所控制的表示時間的字元串。要擷取格式指令的完整清單,檢視文末清單。
用法:date.strftime(format)
掌握了這個方法,随心是以的轉換日期格式
-
import datetime dt=datetime.date(2021, 10, 1)#建立一個日期對象 dt.strftime("%Y-%m-%d") '2021-10-01' dt.strftime("%Y年%m月%d日") '2021年10月01日' dt.strftime("%Y//%m//%d") '2021//10//01' dt.strftime("%Y-%m-%d %H:%M") '2021-10-01 00:00' dt.strftime("%A, %d. %B %Y %I:%M%p") 'Friday, 01. October 2021 12:00AM'
'
date.__format__(format)
與 date.strftime() 相同。此方法使得為 date 對象指定以 格式化字元串字面值 表示的格式化字元串以及使用 str.format() 進行格式化成為可能。雖然不建議使用這個裝逼,但是遇到别人裝逼的時候我們得知道。要擷取格式指令的完整清單,請看文末附表
4、支援的運算
date2 = date1 + timedelta | date2 等于從 date1 減去 timedelta.days 天。(1) |
date2 = date1 - timedelta | 計算 date2 的值使得 date2 + timedelta == date1。(2) |
timedelta = date1 - date2 | (3) |
date1 < date2 | 如果 date1 的時間在 date2 之前則認為 date1 小于 date2 。(4) |
三、datetime.time類
1、time類概述
作用:一個 time 對象代表某日的(本地)時間,它獨立于任何特定日期,并可通過 tzinfo 對象來調整。
語 法:
datetime.time(hour=0, minute=0, second=0, microsecond=0,
tzinfo=None, *, fold=0)
參 數:
所有參數都是可選的,tzinfo 可以是 None,或者是一個 tzinfo 子類的執行個體。 其餘的參數必須是在下面範圍内的整數:
- 0 <= hour < 24
- 0 <= minute < 60
- 0 <= second < 60
- 0 <= microsecond < 1000000
- fold in [0, 1]
如果給出一個此範圍以外的參數,則會引發 ValueError。 所有參數值預設為 0,隻有 tzinfo 預設為 None。
2、time類屬性
time.min
早最的可表示 time, time(0, 0, 0, 0)。
time.max
最晚的可表示 time, time(23, 59, 59, 999999)。
from datetime import time time.max atetime.time(23, 59, 59, 999999)
time.resolution
兩個不相等的 time 對象之間可能的最小間隔,timedelta(microseconds=1),但是請注意 time 對象并不支援算術運算。
from datetime import time time.resolution datetime.timedelta(microseconds=1)
3、time類執行個體屬性
time.hour
取值範圍是 range(24)。
from datetime import time t = time(hour=12, minute=34, second=56, microsecond=123456) t.hour 12
time.minute
取值範圍是 range(60)。
t.minute 34 time.second
取值範圍是 range(60)。
t.second 56
time.microsecond
取值範圍是 range(1000000)。
t.micosecond 123456
time.tzinfo
作為 tzinfo 參數被傳給 time 構造器的對象,如果沒有傳入值則為 None。
t.tzinfo
time.fold
取值範圍是 [0, 1]。 用于在重複的時間段中消除邊界時間歧義。 (當夏令時結束時回撥時鐘或由于政治原因導緻當明時區的 UTC 時差減少就會出現重複的時間段。) 取值 0 (1) 表示兩個時刻早于(晚于)所代表的同一邊界時間。
4、time類執行個體方法
time.replace()
作用:傳回一個具有同樣屬性值的 time,除非通過任何關鍵字參數指定了某些屬性值。
文法:time.replace(hour=self.hour, minute=self.minute, second=self.second,
microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)
from datetime import time t = time(hour=12, minute=34, second=56, microsecond=123456) t.replace(hour=23, minute=12,) datetime.time(23, 12, 56, 123456)
time.isoformat()
作用:傳回表示為 ISO 8601 格式之一的時間字元串
文法:time.isoformat(timespec='auto')
from datetime import time t = time(hour=12, minute=34, second=56, microsecond=123456) t.isoformat() '12:34:56.123456' t.isoformat(timespec='minutes') '12:34' dt = time(hour=12, minute=34, second=56, microsecond=0) dt.isoformat(timespec='microseconds') '12:34:56.000000' dt.isoformat(timespec='auto') '12:34:56'
time.fromisoformat()
作用:傳回對應于 time.isoformat() 所提供的某種 time_string 格式的 time。 特别地,此函數支援以下格式的字元串:HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]
文法:time.fromisoformat(time_string)
time.fromisoformat('04:23:01') datetime.time(4, 23, 1) time.fromisoformat('04:23:01.000384') datetime.time(4, 23, 1, 384) time.fromisoformat('04:23:01+04:00') datetime.time(4,23,1, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400))) time.__str__()
作用:對于時間對象 t, str(t) 等價于 t.isoformat()
文法:time.__str__(t)
from datetime import time t = time(hour=12, minute=34, second=56, microsecond=123456) time.__str__(t) '12:34:56.123456' str(t) '12:34:56.123456'
time.strftime()
作用:時間->字元串,傳回一個由顯式格式字元串所指明的代表時間的字元串
文法:time.strftime(format)
from datetime import time t = time(hour=12, minute=3, second=56) t.strftime('%H:%M:%S') #用:分隔 '12:03:56' #用%分隔 t.strftime('%H%%%M%%%S') '12%03%56'
time.__format__()
作用:與 time.strftime() 相同
文法:time.__format__(format)
from datetime import time t = time(hour=12, minute=3, second=56) t.__format__('%H:%M:%S') '12:03:56' t.__format__('%H%%%M%%%S') '12%03%56'
time.utcoffset()
作用:如果 tzinfo 為 None,則傳回 None,否則傳回 self.tzinfo.utcoffset(None),并且在後者不傳回 None 或一個幅度小于一天的 a timedelta 對象時将引發異常。
time.dst()
作用:如果 tzinfo 為 None,則傳回 None,否則傳回 self.tzinfo.dst(None),并且在後者不傳回 None 或者一個幅度小于一天的 timedelta 對象時将引發異常。
time.tzname()
作用:如果 tzinfo 為 None,則傳回 None,否則傳回 self.tzinfo.tzname(None),如果後者不傳回 None 或者一個字元串對象則将引發異常。
from datetime import time, tzinfo, timedelta class TZ1(tzinfo): def utcoffset(self, dt): return timedelta(hours=1) def dst(self, dt): return timedelta(0) def tzname(self,dt): return "+01:00" def __repr__(self): return f"{self.__class__.__name__}()" t = time(12, 10, 30, tzinfo=TZ1()) t datetime.time(12, 10, 30, tzinfo=TZ1()) t.isoformat() '12:10:30+01:00' t.dst() datetime.timedelta(0) t.tzname() '+01:00' t.strftime("%H:%M:%S %Z") '12:10:30 +01:00' 'The {} is {:%H:%M}.'.format("time", t) 'The time is 12:10.'
四、datetime.datetime類
1、datetime概述
作用:date類可以同時獲得日期和時間資訊,datetime 對象是包含來自 date 對象和 time 對象的所有資訊的單一對象。與 date 對象一樣,datetime 假定目前的格列高利曆向前後兩個方向無限延伸;與 time 對象一樣,datetime 假定每一天恰好有 3600*24 秒。
文法:
datetime.datetime(year, month, day, hour=0, minute=0, second=0,
microsecond=0, tzinfo=None, *, fold=0)
參數:year, month 和 day 參數是必須的。 tzinfo 可以是 None 或者是一個 tzinfo 子類的執行個體。 其餘的參數必須是在下面範圍内的整數:
- MINYEAR <= year <= MAXYEAR,
- 1 <= month <= 12,
- 1 <= day <= 指定年月的天數,
- 0 <= hour < 24,
- 0 <= minute < 60,
- 0 <= second < 60,
- 0 <= microsecond < 1000000,
- fold in [0, 1].
如果參數不在這些範圍内,則抛出 ValueError 異常。
注意:microsecond-微秒,百萬分之一秒
datetime類是date和time的結合體,包括date與time的所有資訊,date和time類中具有的方法和屬性,datetime類都具有。我們可以使用内置函數dir檢視該子產品支援的方法
2、datetime類方法
datetime.today()
作用:擷取今天的時間,傳回datetime對象,其中 tzinfo 為 None。 此方法的功能等價于 now(),但是不帶 tz 形參。
文法:datetime.datetime.today(tz=None )
from dtetime import datetime datetime.today() datetime.datetime(2021, 7, 5, 17, 58, 21, 359135)
注:359135,microsecond-微秒,百萬分之一秒
datetime.now()
作用:傳回目前時間,傳回datetime對象。
文法:datetime.datetime.now(tz=None )
from datetime import datetime #擷取現在時間 datetime.now() datetime.datetime(2021, 6, 27, 21, 59, 53, 950783) #調整下格式 datetime.now().strftime('%Y-%m-%d %H:%M:%S') '2021-06-27 22:01:49'
datetime.utcnow()
作用:傳回表示目前 UTC 時間的 date 和 time,其中 tzinfo 為 None。
文法:datetime.utcnow()
from datetime import datetime datetime.utcnow() datetime.datetime(2021, 7, 6, 2, 46, 7, 229768) datetime.now() datetime.datetime(2021, 7, 6, 10, 46, 3, 67817)
可以看到,now()與相差了差不多8小時
datetime.fromtimestamp()
作用: 将時間戳表示為本地時間的簡單日期時間對象, 如果可選參數 tz 為 None 或未指定,時間戳會被轉換為所在平台的本地日期和時間,傳回的 datetime 對象将為天真型。
文法:datetime.datetime.fromtimestamp(timestamp, tz=None)
import time import datetime tt = time.time() tt 1625542045.2471695 datetime.datetime.fromtimestamp(tt) datetime.datetime(2021, 7, 6, 11, 27, 25, 247169) #取整數後,精确到秒,否則精确到微秒,一微秒=百萬分之一秒 datetime.datetime.fromtimestamp(1625542045) datetime.datetime(2021, 7, 6, 11, 27, 25) #例如,使用日期2008-12-27午夜UTC(自紀元起40*356*86400秒) datetime.datetime.fromtimestamp(40 * 356 * 86400) datetime.datetime(2008, 12, 27, 1, 0)
datetime.utcfromtimestamp()
作用:将時間戳表示為本地時間的UTC日期時間對象
文法:datetime.datetime.utcfromtimestamp(timestamp)
import datetime
#擷取本地目前時間
dt=datetime.datetime.now()
#擷取時間戳
dt.timestamp()
1625549035.048533
datetime.datetime.utcfromtimestamp(dt.timestamp())
datetime.datetime(2021, 7, 6, 5, 23, 55, 48533)
dtetime.fromordinal()
作用:傳回對應于預期格列高利曆序号的 datetime,其中公元 1 年 1 月 1 日的序号為 1。 除非 1 <= ordinal <= datetime.max.toordinal() 否則會引發 ValueError。 結果的 hour, minute, second 和 microsecond 值均為 0,并且 tzinfo 值為 None。
文法:datetime.fromordinal(ordinal)
datetime.datetime.fromordinal(730920)
datetime.datetime(2002, 3, 11, 0, 0)
datetime.combine()
作用:傳回一個date對象和一個time對象合成的date對象, 如果提供了 tzinfo 參數,其值會被用來設定結果的 tzinfo 屬性,否則将使用 time 參數的 tzinfo 屬性。
文法:datetime.combine(date, time, tzinfo=self.tzinfo)
d = date(2005, 7, 14) t = time(12, 30) datetime.combine(d, t) datetime.datetime(2005, 7, 14, 12, 30)
對于任意 datetime 對象 d,d = datetime.combine(d.date(), d.time(), d.tzinfo)。 如果 date 是一個 datetime 對象,它的時間部分和 tzinfo 屬性會被忽略。
datetime.fromisoformat()
作用:傳回一個對應于 date.isoformat() 和 datetime.isoformat() 所提供的某一種 date_string 的 datetime 對象。 特别地,此函數支援以下格式的字元串:YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]],其中 * 可以比對任意的單個字元。
文法:datetime.fromisoformat(date_string)
from datetime import datetime datetime.fromisoformat('2011-11-04') datetime.datetime(2011, 11, 4, 0, 0) datetime.fromisoformat('2011-11-04T00:05:23') datetime.datetime(2011, 11, 4, 0, 5, 23) datetime.fromisoformat('2011-11-04 00:05:23.283') datetime.datetime(2011, 11, 4, 0, 5, 23, 283000) datetime.fromisoformat('2011-11-04 00:05:23.283+00:00') datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfo=datetime.timezone.utc) datetime.fromisoformat('2011-11-04T00:05:23+04:00') datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
datetime.fromisocalendar()
作用:傳回以 year, week 和 day 值指明的 ISO 曆法日期所對應的 datetime。 該datetime 對象的非日期部分将使用其标準預設值來填充。 這是函數 datetime.isocalendar() 的逆操作。
文法:datetime.fromisocalendar(year, week, day)
from datetime import datetime datetime.fromisocalendar(2021, 10, 1) datetime.datetime(2021, 3, 8, 0, 0)
datetime.strptime()
作用:按照特定時間格式将字元串轉換(解析)為時間類型。傳回一個由顯式格式字元串所指明的代表時間的字元串。 要擷取格式指令的完整清單,請參閱 strftime() 和 strptime() 的行為。
文法:datetime.strptime(date_string, format)
dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") dt datetime.datetime(2006, 11, 21, 16, 30)
3、類屬性
datetime.min
最早的可表示 datetime,datetime(MINYEAR, 1, 1, tzinfo=None)。
from datetime import datetime datetime.min datetime.datetime(1, 1, 1, 0, 0)
datetime.max
最晚的可表示 datetime
datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None)。 from datetime import datetime datetime.maxdatetime.datetime(9999, 12, 31, 23, 59, 59, 999999) datetime.resolution
兩個不相等的 datetime 對象之間可能的最小間隔,timedelta(microseconds=1)。
from datetime import datetime datetime.resolutionatetime.timedelta(microseconds=1) 4、實屬性-隻讀
datetime.year
在 MINYEAR 和 MAXYEAR 之間,包含邊界。
from datetime import datetime
datetime(2021,5,20,13,14,0,0).year
2021
datetime.month
1 至 12(含)
from datetime import datetime datetime(2021,5,20,13,14,0,0).month 5
datetime.day
傳回1到指定年月的天數間的數字。
from datetime import datetime datetime(2021,5,20,13,14,0,0).day 20
datetime.hour
取值範圍是 range(24)。
from datetime import datetime datetime(2021,5,20,13,14,0,0).hour 13 datetime.minute
取值範圍是 range(60)。
from datetime import datetime datetime(2021,5,20,13,14,0,0).minute 14
datetime.microsecond
取值範圍是 range(1000000)。
from datetime import datetime datetime(2021,5,20,13,14,0,0).microsecond
datetime.tzinfo
作為 tzinfo 參數被傳給 datetime 構造器的對象,如果沒有傳入值則為 None。
rom datetime import datetime datetime(2021,5,20,13,14,0,0).fold
datetime.fold
取值範圍是 [0, 1]。 用于在重複的時間段中消除邊界時間歧義。 (當夏令時結束時回撥時鐘或由于政治原因導緻當明時區的 UTC 時差減少就會出現重複的時間段。) 取值 0 (1) 表示兩個時刻早于(晚于)所代表的同一邊界時間。
from datetime import datetime
datetime(2021,5,20,13,14,0,0).fold
5、datetime執行個體方法
datetime.date()
作用:傳回具有同樣 year, month 和 day 值的 date 對象。
用法:datetime.date()
datetime.time()
作用:傳回具有同樣 hour, minute, second, microsecond 和 fold 值的 time 對象。 tzinfo 值為 None。 另請參見 timetz() 方法。
用法:datetime.time()
datetime(2021,5,20,13,14,0,0).time() datetime.time(13, 14)
datetime.timetz()
作用:傳回具有同樣 hour, minute, second, microsecond, fold 和 tzinfo 屬性性的 time 對象。 另請參見 time() 方法。
用法:datetime.timetz()
datetime(2021,5,20,13,14,0,0).timetz() datetime.time(13, 14)
datetime.replace()
作用:傳回一個具有同樣屬性值的 datetime,除非通過任何關鍵字參數為某些屬性指定了新值。 請注意可以通過指定 tzinfo=None 來從一個感覺型 datetime 建立一個簡單型 datetime 而不必轉換日期和時間資料。
用法:datetime.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)
from datetime import datetime datetime(2021,5,20,13,14,0,0).replace(year=2035, month=12) datetime.datetime(2035, 12, 20, 13, 14)
datetime.astimezone()
作用:傳回一個具有新的 tzinfo 屬性 tz 的 datetime 對象,并會調整日期和時間資料使得結果對應的 UTC 時間與 self 相同,但為 tz 時區的本地時間。
用法:datetime.astimezone(tz=None)
def astimezone(self, tz): if self.tzinfo is tz: return self # Convert self to UTC, and attach the new time zone object. utc = (self - self.utcoffset()).replace(tzinfo=tz) # Convert from UTC to tz's local time. return tz.fromutc(utc)
datetime.timetuple()
傳回一個 time.struct_time,即 time.localtime() 所傳回的類型。
from datetime import datetime datetime(2021,5,20,13,14,0,0).timetuple() time.struct_time(tm_year=2021, tm_mon=5, tm_mday=20, tm_hour=13, tm_min=14, tm_sec=0, tm_wday=3, tm_yday=140, tm_isdst=-1)
datetime.utctimetuple()
作用:如果 datetime 執行個體 d 為簡單型,這類似于 d.timetuple(),不同之處在于 tm_isdst 會強制設為 0,無論 d.dst() 傳回什麼結果。 DST 對于 UTC 時間永遠無效。傳回UTC時間元組
文法:datetime對象.utctimetuple()
from datetime import datetime datetime(2021,5,20,13,14,0,0).utctimetuple() time.struct_time(tm_year=2021, tm_mon=5, tm_mday=20, tm_hour=13, tm_min=14, tm_sec=0, tm_wday=3, tm_yday=140, tm_isdst=0)
datetime.toordinal()
作用:傳回日期的預期格列高利曆序号。 與 self.date().toordinal() 相同。
用法:datetime.toordinal()
datetime(2021, 5, 4).toordinal() 737914
datetime.timestamp()
作用:傳回對應于 datetime 執行個體的 POSIX 時間戳。 此傳回值是與 time.time() 傳回值類似的 float 對象。
用法:datetime.timestamp()
from datetime import datetime datetime(2021, 5, 4).timestamp() 1620057600.0
datetime.weekday()
作用:傳回一個整數代表星期幾,星期一為 0,星期天為 6。 相當于 self.date().weekday()。 另請參閱 isoweekday()。
用法:datetime.weekday()
import datetime
datetime.datetime(2021, 5, 4).weekday()
1
datetime.isoweekday()
作用:傳回一個整數代表星期幾,星期一為 1,星期天為 7。 相當于 self.date().isoweekday()。 另請參閱 weekday(), isocalendar()。
用法:datetime.isoweekday()
import datetime datetime.datetime(2021, 5, 4).isoweekday() 2
datetime.isocalendar()
作用:傳回一個由三部分組成的元組: year, week 和 weekday,哪一年、第幾周和、周幾,等同于 self.date().isocalendar()。
用法:datetime.isocalendar()
import datetime dt = datetime.datetime.now() print(dt) 2021-07-06 14:22:35.920877 dt.isocalendar() (2021, 27, 2)
datetime.isoformat()
作用:傳回一個以 ISO 8601 格式表示的日期和時間字元串
用法:datetime.isoformat(sep='T', timespec='auto')
from datetime import datetime, timezone datetime(2019, 5, 18, 15, 17, 8, 132263).isoformat() '2019-05-18T15:17:08.132263' datetime(2019, 5, 18, 15, 17, tzinfo=timezone.utc).isoformat()'2019-05-18T15:17:00+00:00'
datetime.__str__()
作用:對于 datetime 執行個體 d,str(d) 等價于 d.isoformat(' ')。
文法:datetime.__str__(d)
from datetime import datetime # __str__ datetime.__str__(datetime(2019, 5, 18, 15, 17, 8, 132263)) '2019-05-18 15:17:08.132263' # str str(datetime(2019, 5, 18, 15, 17, 8, 132263)) '2019-05-18 15:17:08.132263'
datetime.ctime()
作用:傳回一個表示日期和時間的字元串,輸出字元串将 并不 包括時區資訊,無論輸入的是感覺型還是簡單型。
用法:datetime.ctime()
from datetime import datetime datetime(2002, 12, 4, 20, 30, 40).ctime() 'Wed Dec 4 20:30:40 2002' #d.ctime() 等效于: time.ctime(time.mktime(d.timetuple()))
在原生 C ctime() 函數 (time.ctime() 會發起調用該函數,但 datetime.ctime() 則不會) 遵循 C 标準的平台上。
datetime.strftime()
作用:将給定格式的日期時間對象轉換為字元串。日期時間對象=>字元串,控制日期時間對象的輸出格式,date、datetime、time對象都支援strftime(format) 方法,可用來建立由一個顯式格式字元串所控制的表示時間的字元串。要擷取格式指令的完整清單,檢視文末清單。
用法:datetime.strftime(format)
import datetime dt=datetime.datetime(2006, 11, 21, 16, 30) dt.strftime("%Y-%m-%d %H:%M") '2006-11-21 16:30' dt.strftime("%Y-%m-%d") '2006-11-21' dt.strftime("%A, %d. %B %Y %I:%M%p") 'Tuesday, 21. November 2006 04:30PM'
對比:
strftime: 将給定格式的日期時間對象轉換為字元串。日期時間對象=>字元串,控制輸出格式
strptime:将字元串解析為給定格式的日期時間對象。字元串=>日期時間對象,解析字元串
strftime | strptime | |
用法 | 根據給定的格式将對日期時間象轉換為字元串 | 将字元串解析為給定相應格式的datetime 對象 |
類型 | 執行個體方法 | 類方法 |
方法 | date; datetime; time | datetime |
用法 | strftime(format) | strptime(date_string, format) |
示例 | datetime.datetime(2006, 11, 21, 16, 30) => '2006-11-21 16:30' | "21/11/06 16:30" => datetime.datetime(2006, 11, 21, 16, 30) |
datetime.__format__()
作用:與 datetime.strftime() 相同。
文法:datetime.__format__(format)
impotdatetime dt=datetime.datetime(2006, 11, 21, 16, 30) dt.__format__("%Y-%m-%d %H:%M") '2006-11-21 16:30'