小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【萬字長文】詳解Python時間處理模塊-datetime

 520jefferson 2021-10-30
學(xué)習(xí)該模塊,首先要有一個概念:日期和時間,要不然會混亂,這里進(jìn)行狹義的理解即可:日期是日期,時間是時間,日常生活中有時候并沒有很好的去區(qū)分。
日期:年月日,如 20210612
時間:時分秒,如 20:45:50
Python標(biāo)準(zhǔn)庫中包含日期(date)和時間(time)的數(shù)據(jù)類型,還有日歷方面的功能。要比較系統(tǒng)的學(xué)習(xí)該模塊,需要了解下面的兩個概念。
UTC(全球標(biāo)準(zhǔn)時間):是全球范圍內(nèi)計時的科學(xué)標(biāo)準(zhǔn),它基于精心維護(hù)的原子鐘,在全球范圍內(nèi)精確到微秒,由于英文(CUT)和法文(TUC)的縮寫不同,作為妥協(xié),簡稱UTC。作為全球最精確的時間系統(tǒng),天文學(xué)家、航海家、“太空跟蹤網(wǎng)”(DSN) 以及其他科學(xué)性學(xué)科都使用它,它的參考點是英國格林威治標(biāo)準(zhǔn)時間(GMT):地球本初子午線的午夜,也是 UTC 的午夜 (00:00:00.000000)。本地時間是根據(jù)地球上不同時區(qū)所處的位置調(diào)整 UTC 得來的,比如當(dāng)美國加州的太平洋時間為正午 12:00:00 時,UTC 為 20:00:00。
夏令時(DST):表示為了節(jié)約能源,人為規(guī)定時間的意思。也叫夏時制,夏時令(Daylight Saving Time:DST),又稱'日光節(jié)約時制'和'夏令時間”,在這一制度實行期間所采用的統(tǒng)一時間稱為“夏令時間”。一般在天亮早的夏季人為將時間調(diào)快一小時,可以使人早起早睡,減少照明量,以充分利用光照資源,從而節(jié)約照明用電。各個采納夏時制的國家具體規(guī)定不同。全世界有近110個國家每年要實行夏令時。
感知型”和“簡單型”對象:日期和時間對象可以根據(jù)它們是否包含時區(qū)信息而分為“感知型”和“簡單型”兩類。充分掌握應(yīng)用性算法和政治性時間調(diào)整信息例如時區(qū)和夏令時的情況下,一個 感知型 對象就能相對于其他感知型對象來精確定位自身時間點。感知型對象是用來表示一個沒有解釋空間的固定時間點。簡單型對象沒有包含足夠多的信息來無歧義地相對于其他 date/time 對象來定位自身時間點。
時間戳:Unix時間戳是從1970年1月1日(UTC/GMT的午夜)開始所經(jīng)過的秒數(shù),不考慮閏秒。Unix時間戳(英文為Unix epoch, Unix time, POSIX time 或 Unix timestamp)
import time time.time() 1625483470.3409266

一、datetime模塊概
Python內(nèi)置的時間模塊datetime包含下面的模塊包含六個類和兩個常數(shù),提供了用于處理日期和時間的類和對應(yīng)的方法,一般用于處理年、月、日、時、分、秒的統(tǒng)計和計算等需求,且這些類型的對象都是不可變的。最常用的是datetime.datetime,有些人誤以為就一個模塊,其實是datetime模塊下的datetime類。

常量、類或方法名
注解
datetime.date
一個理想化的簡單型日期,它假設(shè)當(dāng)今的公歷在過去和未來永遠(yuǎn)有效。屬性包含: year, month, day。
datetime.time
一個獨立于任何特定日期的理想化時間,它假設(shè)每一天都恰好等于 24*60*60 秒。這里沒有“閏秒”的概念) 包含屬性:hour、minute、second、microsecond 、tzinfo。
datetime.datetime
是日期和時間的結(jié)合,屬性包含year、month、day、hour、minute、second、 microsecond、 tzinfo.表示日期時間
datetime.timedelta
表示兩個 date 對象或者 time 對象,或者 datetime 對象之間的時間間隔,精確到微秒。
datetime.tzinfo
一個描述時區(qū)信息對象的抽象基類。用來給datetime和time類提供自定義的時間調(diào)整概念(例如處理時區(qū)和/或夏令時)。
datetime.timezone
一個實現(xiàn)了tzinfo抽象基類的子類,用于表示相對于世界標(biāo)準(zhǔn)時間(UTC)的偏移量。
datetime.MINYEAR
常量,表示年份允許的最小值為1
datetime.MAXYEAR
常量,表示年份允許的最大值為9999
書接上回,接著寫

二、datetime.date類

1、date類介紹

作用:date類用來處理日期信息
語法:date類是datetime的內(nèi)嵌類,實例化語法:datetime.date(year, month, day)
參數(shù):year年份、month月份及day日期,所有參數(shù)都是必要的, 參數(shù)必須是在下面范圍內(nèi)的整數(shù)
MINYEAR <= year <= MAXYEAR
1 <= month <= 12
1 <= day<= 給定年月對應(yīng)的天數(shù)
如果參數(shù)不在這些范圍內(nèi),則拋出 ValueError 異常。
import datetimet = datetime.date(2019,8,26)print(type(t))print(t.day,t.month,t.year) # <class 'datetime.date'>26 8 2019
通過內(nèi)置函數(shù)dir,可以查看date類的所有方法和屬性
from datetime import dateprint(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()

作用:返回當(dāng)前的本地日期,等價于date.fromtimestamp(time.time())。
from datetime import date date.today()datetime.date(202174)

date.fromtimestamp()

作用:返回對應(yīng)于POSIX時間戳的當(dāng)?shù)貢r間,例如 time.time() 返回的就是時間戳。這可能引發(fā) OverflowError,如果時間戳數(shù)值超出所在平臺 C localtime() 函數(shù)的支持范圍的話,并且會在 localtime() 出錯時引發(fā) OSError。通常該數(shù)值會被限制在 1970 年至 2038 年之間。請注意在時間戳概念包含閏秒的非 POSIX 系統(tǒng)上,閏秒會被 fromtimestamp() 所忽略。
在 3.3 版更改: 引發(fā) OverflowError 而不是 ValueError,如果時間戳數(shù)值超出所在平臺 C localtime() 函數(shù)的支持范圍的話,并會在 localtime() 出錯時引發(fā) OSError 而不是 ValueError。
用法:date.fromtimestamp(timestamp)
from datetime import datedate.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的午夜)開始所經(jīng)過的秒數(shù),不考慮閏秒。
 

date.fromordinal()

作用:返回對應(yīng)于預(yù)期格列高利歷序號的日期,其中公元 1 年 1 月 1 晶的序號為 1。
用法:date.fromordinal(ordinal)
from datetime import dated = date.fromordinal(730920) # 730920th day after 1. 1. 0001ddatetime.date(2002, 3, 11)
 

date.fromisoformat()

作用:返回一個對應(yīng)于以 YYYY-MM-DD 格式給出的 date_string 的 date 對象
用法:date.fromisoformat(date_string)
from datetime import datedate.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 所對應(yīng) ISO 歷法日期的 date。這是函數(shù) 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 datedate.mindatetime.date(1, 1, 1)

date.max

最大的日期 ,date(MAXYEAR, 12, 31)。
from datetime import datedate.maxdatetime.date(9999, 12, 31)

date.resolution

兩個日期對象的最小間隔,timedelta(days=1)。
from datetime import datedate.resolutiondatetime.timedelta(days=1)

date.year

在 MINYEAR 和 MAXYEAR 之間,包含邊界。
from datetime import date d = date.today()#生成一個date對象ddatetime.date(2021, 7, 5)d.year2021

date.month

1 至 12(含)
#接上述案例d.month7

date.day

返回1到指定年月的天數(shù)間的數(shù)字。
#接上述案例d.day5
 

3、實例方法

date.replace()

作用:返回一個具有同樣值的日期,除非通過任何關(guān)鍵字參數(shù)給出了某些形參的新值。
用法:date.replace(year=self.year, month=self.month, day=self.day)
from datetime import dated = 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 旗標(biāo)值為 -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()

作用:返回日期的預(yù)期格列高利歷序號,其中公元 1 年 1 月 1 日的序號為 1。對于任意 date 對象 d,date.fromordinal(d.toordinal()) == d。
d = date(1, 1, 1)d.toordinal()1d = date(2002, 12, 31)d.toordinal()731215date.fromordinal(d.toordinal())datetime.date(2002, 12, 31)
 

date.weekday()

作用:返回一個整數(shù)代表星期幾,星期一為0,星期天為6。
date(2002, 12, 4).weekday()2

date.isoweekday()

作用:返回一個整數(shù)代表星期幾,星期一為1,星期天為7。
date(2002, 12, 4).isoweekday()3

date.isocalendar()

作用:返回一個由三部分組成的 named tuple 對象: year, week 和 weekday。
ISO 歷法是一種被廣泛使用的格列高利歷。ISO 年由 52 或 53 個完整星期構(gòu)成,每個星期開始于星期一結(jié)束于星期日。一個 ISO 年的第一個星期就是(格列高利)歷法的一年中第一個包含星期四的星期。這被稱為 1 號星期,這個星期四所在的 ISO 年與其所在的格列高利年相同。
例如,2004 年的第一天是星期四,因此 ISO 2004 年的第一個星期開始于 2003 年 12 月 29 日星期一,結(jié)束于 2004 年 1 月 4 日星期日.
from datetime import datedate(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 版更改: 結(jié)果由元組改為 named tuple。
 

date.isoformat()

作用:返回一個以 ISO 8601 格式 YYYY-MM-DD 來表示日期的字符串
用法:date.isoformat(d)
from datetime import datedate(2021, 10, 1).isoformat()'2021-10-01'
這是 date.fromisoformat() 的逆操作。
 

date.__str__()

作用:對于日期對象 d, str(d) 等價于 d.isoformat() 。
用法:date.__str__(d)
from datetime import datedate(2021, 10, 1).__str__()'2021-10-01'str(date(2021, 10, 1))'2021-10-01'
 

date.ctime()

作用:返回一個表示日期的字符串,在原生 C ctime() 函數(shù) (time.ctime() 會發(fā)起調(diào)用該函數(shù),但 date.ctime() 則不會) 遵循 C 標(biāo)準(zhǔn)的平臺上。
from datetime import datedate(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 timetime.ctime(time.mktime(d.timetuple()))'Fri Oct  1 00:00:00 2021'

date.strftime()

作用:翻譯下就是 str from time,將給定格式的日期時間對象轉(zhuǎn)換為字符串。日期時間對象=>字符串,控制日期時間對象的輸出格式,date、datetime、time對象都支持strftime(format) 方法,可用來創(chuàng)建由一個顯式格式字符串所控制的表示時間的字符串。要獲取格式指令的完整列表,查看文末列表。
用法:date.strftime(format)
掌握了這個方法,隨心所以的轉(zhuǎn)換日期格式
import datetimedt=datetime.date(2021, 10, 1)#創(chuàng)建一個日期對象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() 進(jìn)行格式化成為可能。雖然不建議使用這個裝逼,但是遇到別人裝逼的時候我們得知道。要獲取格式指令的完整列表,請看文末附表
import datetimedt=datetime.date(2021, 10, 1)#創(chuàng)建一個日期對象dt.__format__('%Y年%m月%d日')'2021年10月01日'
 

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 之前則認(rèn)為 date1 小于 date2 。(4)

三、datetime.time類

1、time類概述

作用:一個 time 對象代表某日的(本地)時間,它獨立于任何特定日期,并可通過 tzinfo 對象來調(diào)整。

語 法:

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

參 數(shù):

所有參數(shù)都是可選的,tzinfo 可以是 None,或者是一個 tzinfo 子類的實例。 其余的參數(shù)必須是在下面范圍內(nèi)的整數(shù):

  • 0 <= hour < 24

  • 0 <= minute < 60

  • 0 <= second < 60

  • 0 <= microsecond < 1000000

  • fold in [0, 1]

如果給出一個此范圍以外的參數(shù),則會引發(fā) ValueError。 所有參數(shù)值默認(rèn)為 0,只有 tzinfo 默認(rèn)為 None。

通過內(nèi)置函數(shù)dir,可以查看time類的所有方法和屬性

from datetime import timeprint(dir(time))['dst', 'fold', 'fromisoformat', 'hour', 'isoformat', 'max', 'microsecond', 'min', 'minute', 'replace', 'resolution', 'second', 'strftime', 'tzinfo', 'tzname', 'utcoffset']

2、time屬性

time.min

早最的可表示 time, time(0, 0, 0, 0)。

from datetime import timetime.mindatetime.time(0, 0)

time.max

最晚的可表示 time, time(23, 59, 59, 999999)。

from datetime import timetime.maxdatetime.time(23, 59, 59, 999999)

time.resolution

兩個不相等的 time 對象之間可能的最小間隔,timedelta(microseconds=1),但是請注意 time 對象并不支持算術(shù)運算。

from datetime import timetime.resolutiondatetime.timedelta(microseconds=1)

3、time實例屬性

time.hour

取值范圍是 range(24)。

from datetime import timet = time(hour=12, minute=34, second=56, microsecond=123456)t.hour12

time.minute

取值范圍是 range(60)。

t.minute34

time.second

取值范圍是 range(60)。

t.second56

time.microsecond

取值范圍是 range(1000000)。

t.microsecond123456

time.tzinfo

作為 tzinfo 參數(shù)被傳給 time 構(gòu)造器的對象,如果沒有傳入值則為 None。

t.tzinfo

time.fold

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

t.fold0

4、time實例方法

time.replace()

作用:返回一個具有同樣屬性值的 time,除非通過任何關(guān)鍵字參數(shù)指定了某些屬性值。

語法:time.replace(hour=self.hour, minute=self.minute, second=self.second, 

microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)

from datetime import timet = 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 timet = 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()

作用:返回對應(yīng)于 time.isoformat() 所提供的某種 time_string 格式的 time。 特別地,此函數(shù)支持以下格式的字符串: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 timet = 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 timet = 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 timet = 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 對象時將引發(fā)異常。

time.dst()

作用:如果 tzinfo 為 None,則返回 None,否則返回 self.tzinfo.dst(None),并且在后者不返回 None 或者一個幅度小于一天的 timedelta 對象時將引發(fā)異常。

time.tzname()

作用:如果 tzinfo 為 None,則返回 None,否則返回 self.tzinfo.tzname(None),如果后者不返回 None 或者一個字符串對象則將引發(fā)異常。

from datetime import time, tzinfo, timedeltaclass 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())tdatetime.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 假定當(dāng)前的格列高利歷向前后兩個方向無限延伸;與 time 對象一樣,datetime 假定每一天恰好有 3600*24 秒。

語法:

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

參數(shù):year, month 和 day 參數(shù)是必須的。 tzinfo 可以是 None 或者是一個 tzinfo 子類的實例。 其余的參數(shù)必須是在下面范圍內(nèi)的整數(shù):

  • MINYEAR <= year <= MAXYEAR,

  • 1 <= month <= 12,

  • 1 <= day <= 指定年月的天數(shù),

  • 0 <= hour < 24,

  • 0 <= minute < 60,

  • 0 <= second < 60,

  • 0 <= microsecond < 1000000,

  • fold in [0, 1].

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

注意:microsecond-微秒,百萬分之一秒

datetime類是date和time的結(jié)合體,包括date與time的所有信息,date和time類中具有的方法和屬性,datetime類都具有。我們可以使用內(nèi)置函數(shù)dir查看該模塊支持的方法

print(dir(datetime.datetime))[ 'astimezone', 'combine', 'ctime', 'date', 'day', 'dst', 'fold', 'fromisoformat', 'fromordinal', 'fromtimestamp', 'hour', 'isocalendar', 'isoformat', 'isoweekday', 'max', 'microsecond', 'min', 'minute', 'month', 'now', 'replace', 'resolution', 'second', 'strftime', 'strptime', 'time', 'timestamp', 'timetuple', 'timetz', 'today', 'toordinal', 'tzinfo', 'tzname', 'utcfromtimestamp', 'utcnow', 'utcoffset', 'utctimetuple', 'weekday', 'year']

2、datetime類方法

datetime.today()

作用:獲取今天的時間,返回datetime對象,其中 tzinfo 為 None。 此方法的功能等價于 now(),但是不帶 tz 形參。

語法:datetime.datetime.today(tz=None )

from datetime import datetimedatetime.today() datetime.datetime(2021, 7, 5, 17, 58, 21, 359135)

注:359135,microsecond-微秒,百萬分之一秒

datetime.now()

作用:返回當(dāng)前時間,返回datetime對象。

語法:datetime.datetime.now(tz=None )

from datetime import datetime#獲取現(xiàn)在時間datetime.now()datetime.datetime(2021, 6, 27, 21, 59, 53, 950783)#調(diào)整下格式datetime.now().strftime('%Y-%m-%d %H:%M:%S')'2021-06-27 22:01:49'

datetime.utcnow()

作用:返回表示當(dāng)前 UTC 時間的 date 和 time,其中 tzinfo 為 None。

語法:datetime.utcnow()

from datetime import datetimedatetime.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()

作用:時間戳表示為本地時間的簡單日期時間對象, 如果可選參數(shù) tz 為 None 或未指定,時間戳?xí)晦D(zhuǎn)換為所在平臺的本地日期和時間,返回的 datetime 對象將為天真型。

語法:datetime.datetime.fromtimestamp(timestamp, tz=None)

import timeimport datetimett = time.time()tt1625542045.2471695datetime.datetime.fromtimestamp(tt)datetime.datetime(2021, 7, 6, 11, 27, 25, 247169)#取整數(shù)后,精確到秒,否則精確到微秒,一微秒=百萬分之一秒datetime.datetime.fromtimestamp(1625542045)datetime.datetime(2021, 7, 6, 11, 27, 25)#例如,使用日期2008-12-27午夜UTC(自紀(jì)元起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
#獲取本地當(dāng)前時間
dt=datetime.datetime.now()
#獲取時間戳
dt.timestamp()
1625549035.048533
datetime.datetime.utcfromtimestamp(dt.timestamp())
datetime.datetime(2021, 7, 6, 5, 23, 55, 48533)

datetime.fromordinal()

作用:返回對應(yīng)于預(yù)期格列高利歷序號的 datetime,其中公元 1 年 1 月 1 日的序號為 1。 除非 1 <= ordinal <= datetime.max.toordinal() 否則會引發(fā) ValueError。 結(jié)果的 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 參數(shù),其值會被用來設(shè)置結(jié)果的 tzinfo 屬性,否則將使用 time 參數(shù)的 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()

作用:返回一個對應(yīng)于 date.isoformat() 和 datetime.isoformat() 所提供的某一種 date_string 的 datetime 對象。 特別地,此函數(shù)支持以下格式的字符串:YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]],其中 * 可以匹配任意的單個字符。

語法:datetime.fromisoformat(date_string)

from datetime import datetimedatetime.fromisoformat('2011-11-04')datetime.datetime(201111400)
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 歷法日期所對應(yīng)的 datetime。 該datetime 對象的非日期部分將使用其標(biāo)準(zhǔn)默認(rèn)值來填充。 這是函數(shù) datetime.isocalendar() 的逆操作。

語法:datetime.fromisocalendar(year, week, day)

from datetime import datetimedatetime.fromisocalendar(2021, 10, 1) datetime.datetime(2021, 3, 8, 0, 0)

datetime.strptime()

作用:按照特定時間格式將字符串轉(zhuǎn)換(解析)為時間類型。返回一個由顯式格式字符串所指明的代表時間的字符串。 要獲取格式指令的完整列表,請參閱 strftime() 和 strptime() 的行為。

語法:datetime.strptime(date_string, format)

dt = datetime.strptime('21/11/06 16:30''%d/%m/%y %H:%M')dtdatetime.datetime(2006, 11, 21, 16, 30)

3、類屬性

datetime.min

最早的可表示 datetime,datetime(MINYEAR, 1, 1, tzinfo=None)。

from datetime import datetimedatetime.mindatetime.datetime(1, 1, 1, 0, 0)

datetime.max

最晚的可表示 datetime,

datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None)。from datetime import datetimedatetime.maxdatetime.datetime(9999, 12, 31, 23, 59, 59, 999999)

datetime.resolution

兩個不相等的 datetime 對象之間可能的最小間隔,timedelta(microseconds=1)。

from datetime import datetimedatetime.resolutiondatetime.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 datetimedatetime(2021,5,20,13,14,0,0).month5

datetime.day

返回1到指定年月的天數(shù)間的數(shù)字。

from datetime import datetimedatetime(2021,5,20,13,14,0,0).day20

datetime.hour

取值范圍是 range(24)。

from datetime import datetimedatetime(2021,5,20,13,14,0,0).hour13

datetime.minute

取值范圍是 range(60)。

from datetime import datetimedatetime(2021,5,20,13,14,0,0).minute14

datetime.second

取值范圍是 range(60)。

from datetime import datetimedatetime(2021,5,20,13,14,0,0).second0

datetime.microsecond

取值范圍是 range(1000000)。

from datetime import datetimedatetime(2021,5,20,13,14,0,0).microsecond0

datetime.tzinfo

作為 tzinfo 參數(shù)被傳給 datetime 構(gòu)造器的對象,如果沒有傳入值則為 None。

from datetime import datetimedatetime(2021,5,20,13,14,0,0).fold

datetime.fold

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

from datetime import datetimedatetime(2021,5,20,13,14,0,0).fold0

5、datetime實例方法

datetime.date()

作用:返回具有同樣 year, month 和 day 值的 date 對象。

用法:datetime.date()

datetime(2021,5,20,13,14,0,0).date()datetime.date(2021, 5, 20)

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,除非通過任何關(guān)鍵字參數(shù)為某些屬性指定了新值。 請注意可以通過指定 tzinfo=None 來從一個感知型 datetime 創(chuàng)建一個簡單型 datetime 而不必轉(zhuǎn)換日期和時間數(shù)據(jù)。

用法: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 datetimedatetime(2021,5,20,13,14,0,0).replace(year=2035, month=12)datetime.datetime(2035, 12, 20, 13, 14)

datetime.astimezone()

作用:返回一個具有新的 tzinfo 屬性 tz 的 datetime 對象,并會調(diào)整日期和時間數(shù)據(jù)使得結(jié)果對應(yīng)的 UTC 時間與 self 相同,但為 tz 時區(qū)的本地時間。

用法: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 datetimedatetime(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 會強制設(shè)為 0,無論 d.dst() 返回什么結(jié)果。 DST 對于 UTC 時間永遠(yuǎn)無效。返回UTC時間元組

語法:datetime對象.utctimetuple()

from datetime import datetimedatetime(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()

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

用法:datetime.toordinal()

datetime(2021, 5, 4).toordinal()737914

datetime.timestamp()

作用:返回對應(yīng)于 datetime 實例的 POSIX 時間戳。 此返回值是與 time.time() 返回值類似的 float 對象。

用法:datetime.timestamp()

from datetime import datetimedatetime(2021, 5, 4).timestamp()1620057600.0

datetime.weekday()

作用:返回一個整數(shù)代表星期幾,星期一為 0,星期天為 6。 相當(dāng)于 self.date().weekday()。 另請參閱 isoweekday()。

用法:datetime.weekday()

import datetimedatetime.datetime(2021, 5, 4).weekday()1

datetime.isoweekday()

作用:返回一個整數(shù)代表星期幾,星期一為 1,星期天為 7。 相當(dāng)于 self.date().isoweekday()。 另請參閱 weekday(), isocalendar()。

用法:datetime.isoweekday()

import datetimedatetime.datetime(2021, 5, 4).isoweekday()2

datetime.isocalendar()

作用:返回一個由三部分組成的元組: year, week 和 weekday,哪一年、第幾周和、周幾等同于 self.date().isocalendar()。

用法:datetime.isocalendar()

import datetimedt = datetime.datetime.now()print(dt)2021-07-06 14:22:35.920877dt.isocalendar()(2021, 27, 2)

datetime.isoformat()

作用:返回一個以 ISO 8601 格式表示的日期和時間字符串

用法:datetime.isoformat(sep='T', timespec='auto')

from datetime import datetime, timezonedatetime(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'# strstr(datetime(2019, 5, 18, 15, 17, 8, 132263))'2019-05-18 15:17:08.132263'

datetime.ctime()

作用:返回一個表示日期和時間的字符串,輸出字符串將 并不 包括時區(qū)信息,無論輸入的是感知型還是簡單型。

用法:datetime.ctime()

from datetime import datetimedatetime(2002, 12, 4, 20, 30, 40).ctime()'Wed Dec  4 20:30:40 2002'#d.ctime() 等效于:time.ctime(time.mktime(d.timetuple()))

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

datetime.strftime()

作用:將給定格式的日期時間對象轉(zhuǎn)換為字符串。日期時間對象=>字符串,控制日期時間對象的輸出格式,date、datetime、time對象都支持strftime(format) 方法,可用來創(chuàng)建由一個顯式格式字符串所控制的表示時間的字符串。要獲取格式指令的完整列表,查看文末列表。

用法:datetime.strftime(format)

import datetimedt=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: 將給定格式的日期時間對象轉(zhuǎn)換為字符串。日期時間對象=>字符串,控制輸出格式

strptime:將字符串解析為給定格式的日期時間對象。字符串=>日期時間對象,解析字符串


strftime

strptime

用法

根據(jù)給定的格式將對日期時間象轉(zhuǎn)換為字符串

將字符串解析為給定相應(yīng)格式的datetime 對象

類型

實例方法

類方法

方法

datedatetimetime

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)

import datetimedt=datetime.datetime(2006, 11, 21, 16, 30)dt.__format__('%Y-%m-%d %H:%M')'2006-11-21 16:30'

五、datetime.timedelta

1、模塊概述

作用:timedelta 對象表示兩個 date 或者 time 的時間間隔。

語法:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0,

 minutes=0, hours=0, weeks=0)

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

  • 1毫秒會轉(zhuǎn)換成1000微秒。

  • 1分鐘會轉(zhuǎn)換成60秒。

  • 1小時會轉(zhuǎn)換成3600秒。

  • 1星期會轉(zhuǎn)換成7天。

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

  • 0 <= microseconds < 1000000

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

  • -999999999 <= days <= 999999999

下面的例子演示了如何對 days, seconds 和 microseconds 以外的任意參數(shù)執(zhí)行“合并”操作并標(biāo)準(zhǔn)化為以上三個結(jié)果屬性

from datetime import timedeltadelta = timedelta(days=50,seconds=27,microseconds=10,milliseconds=29000,                  minutes=5,hours=8,weeks=2)#只有 days, seconds 和 microseconds 會存儲在內(nèi)部,其他會被轉(zhuǎn)換deltadatetime.timedelta(days=64, seconds=29156, microseconds=10)

通過dir查看該類的方法和屬性

import datetimedir(datetime.timedelta)['days','max','microseconds', 'min', 'resolution', 'seconds', 'total_seconds']

2、類屬性

timedelta.min

The most negative timedelta object, timedelta(-999999999).

from datetime import timedeltatimedelta.mindatetime.timedelta(days=-999999999)

timedelta.max

from datetime import timedeltatimedelta.maxdatetime.timedelta(days=999999999, seconds=86399, microseconds=999999)

timedelta.resolution

兩個不相等的 timedelta 類對象最小的間隔為 timedelta(microseconds=1)。

需要注意的是,因為標(biāo)準(zhǔn)化的緣故,timedelta.max > -timedelta.min,-timedelta.max 不可以表示一個 timedelta 類對象。

from datetime import timedeltatimedelta.resolutiondatetime.timedelta(microseconds=1)

3、實例屬性(只讀)

timedelta.days

-999999999 至 999999999 ,含999999999

from datetime import timedeltadelta = timedelta(days=50,seconds=27,microseconds=10,milliseconds=29000, minutes=5,hours=8,weeks=2)deltadatetime.timedelta(days=64, seconds=29156, microseconds=10)delta.days64

timedelta.seconds

0 至 86399,包含86399delta.seconds29156

timedelta.microseconds

0 至 999999,包含999999

delta.microseconds10

4、實例方法

timedelta.total_seconds()

作用:返回時間間隔包含了多少秒。等價于 td / timedelta(seconds=1)。對于其它單位可以直接使用除法的形式 (例如 td / timedelta(microseconds=1))。

需要注意的是,時間間隔較大時,這個方法的結(jié)果中的微秒將會失真(大多數(shù)平臺上大于270年視為一個較大的時間間隔)。

from datetime import timedeltayear = timedelta(days=1)timedelta.total_seconds(year)86400.0

5、支持的運算

運算

結(jié)果

t1 = t2 + t3

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

t1 = t2 - t3

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

t1 = t2 * i or t1 = i * t2

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


In general, t1 * i == t1 * (i-1) + t1 is true. (1)

t1 = t2 * f or t1 = f * t2

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

f = t2 / t3

總時間 t2 除以間隔單位 t3 (3)。 返回一個 float 對象。

t1 = t2 / f or t1 = t2 / i

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

t1 = t2 // i or t1 = t2 // t3

計算底數(shù),其余部分(如果有)將被丟棄。在第二種情況下,將返回整數(shù)。 (3)

t1 = t2 % t3

余數(shù)為一個 timedelta 對象。(3)

q, r = divmod(t1, t2)

通過 : q = t1 // t2 (3) and r = t1 % t2 計算出商和余數(shù)。q是一個整數(shù),r是一個 timedelta 對象。

+t1

返回一個相同數(shù)值的 timedelta 對象。

-t1

等價于 timedelta(-t1.days, -t1.seconds, -t1.microseconds), 和 t1* -1. (1)(4)

abs(t)

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

str(t)

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

repr(t)

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

注:

1)結(jié)果正確,但可能會溢出。

2)結(jié)果正確,不會溢出。

3)除以0將會拋出異常 ZeroDivisionError 。

4)-timedelta.max 不是一個 timedelta 類對象。

5)timedelta 對象的字符串表示形式類似于其內(nèi)部表示形式被規(guī)范化。對于負(fù)時間增量,這會導(dǎo)致一些不尋常的結(jié)果。例如:

timedelta(hours=-5)datetime.timedelta(days=-1, seconds=68400)print(_)-1 day, 19:00:00

6)表達(dá)式 t2 - t3 通常與 t2 + (-t3) 是等價的,除非 t3 等于 timedelta.max; 在這種情況下前者會返回結(jié)果,而后者則會溢出。

from datetime import timedeltayear = timedelta(days=365)ten_years = 10 * yearten_yearsdatetime.timedelta(days=3650)ten_years.days // 36510nine_years = ten_years - yearnine_yearsdatetime.timedelta(days=3285)three_years = nine_years // 3three_years, three_years.days // 365(datetime.timedelta(days=1095), 3)

六、datetime.tzinfo(時區(qū))

class datetime.tzinfo

這是一個抽象基類,也就是說該類不應(yīng)被直接實例化。 請定義 tzinfo 的子類來捕獲有關(guān)特定時區(qū)的信息。

七、datetime.timezone

timezone 類是 tzinfo 的子類,它的每個實例都代表一個以與 UTC 的固定時差來定義的時區(qū)。

八、常量模塊

datetime.MINYEAR

date 或者 datetime 對象允許的最小年份。 常量 MINYEAR 是 1 。

import datetime datetime.MINYEAR1

datetime.MAXYEAR

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

import datetime datetime.MAXYEAR9999

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多