<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          隨心所欲地用Python處理時間(1&2)

          共 8068字,需瀏覽 17分鐘

           ·

          2021-10-01 08:14

          datetime模塊提供了用于處理日期和時間的類和對應(yīng)的方法,一般用于處理年、月、日、時、分、秒的統(tǒng)計(jì)和計(jì)算等需求。在支持日期時間數(shù)學(xué)運(yùn)算的同時,實(shí)現(xiàn)的關(guān)注點(diǎn)更著重于如何能夠更有效地解析其屬性用于格式化輸出和數(shù)據(jù)操作。學(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)計(jì)時的科學(xué)標(biāo)準(zhǔn),它基于精心維護(hù)的原子鐘,在全球范圍內(nèi)精確到微秒,由于英文(CUT)和法文(TUC)的縮寫不同,作為妥協(xié),簡稱UTC。作為全球最精確的時間系統(tǒng),天文學(xué)家、航海家、“太空跟蹤網(wǎng)”(DSN) 以及其他科學(xué)性學(xué)科都使用它,它的參考點(diǎn)是英國格林威治標(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é)約時制"和"夏令時間”,在這一制度實(shí)行期間所采用的統(tǒng)一時間稱為“夏令時間”。一般在天亮早的夏季人為將時間調(diào)快一小時,可以使人早起早睡,減少照明量,以充分利用光照資源,從而節(jié)約照明用電。各個采納夏時制的國家具體規(guī)定不同。全世界有近110個國家每年要實(shí)行夏令時。

          感知型”和“簡單型”對象:日期和時間對象可以根據(jù)它們是否包含時區(qū)信息而分為“感知型”和“簡單型”兩類。充分掌握應(yīng)用性算法和政治性時間調(diào)整信息例如時區(qū)和夏令時的情況下,一個?感知型?對象就能相對于其他感知型對象來精確定位自身時間點(diǎn)。感知型對象是用來表示一個沒有解釋空間的固定時間點(diǎn)。簡單型對象沒有包含足夠多的信息來無歧義地相對于其他 date/time 對象來定位自身時間點(diǎn)。

          時間戳: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)計(jì)和計(jì)算等需求,且這些類型的對象都是不可變的。最常用的是datetime.datetime,有些人誤以為就一個模塊,其實(shí)是datetime模塊下的datetime類。


          常量、類或方法名

          注解

          datetime.date

          一個理想化的簡單型日期,它假設(shè)當(dāng)今的公歷在過去和未來永遠(yuǎn)有效。屬性包含: year, month, day。

          datetime.time

          一個獨(dú)立于任何特定日期的理想化時間,它假設(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

          一個實(shí)現(xiàn)了tzinfo抽象基類的子類,用于表示相對于世界標(biāo)準(zhǔn)時間(UTC)的偏移量。

          datetime.MINYEAR

          常量,表示年份允許的最小值為1

          datetime.MAXYEAR

          常量,表示年份允許的最大值為9999

          書接上回,接著寫


          二、datetime.date類

          1、date類介紹

          作用:date類用來處理日期信息

          語法:date類是datetime的內(nèi)嵌類,實(shí)例化語法: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(2021,?7,?4)

          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、實(shí)例方法

          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、支持的運(yùn)算

          date2?=?date1?+?timedelta

          date2 等于從 date1 減去 timedelta.days 天。(1)

          date2?=?date1?-?timedelta

          計(jì)算 date2 的值使得 date2 + timedelta == date1。(2)

          timedelta?=?date1?-?date2

          (3)

          date1?<?date2

          如果 date1 的時間在 date2 之前則認(rèn)為 date1 小于 date2 。(4)

          關(guān)聯(lián)閱讀:Python中的時間函數(shù)strftime與strptime對比


          ···? END? ···
          一、Number(數(shù)字)全面掌握Python基礎(chǔ),這一篇就夠了,建議收藏Python基礎(chǔ)之?dāng)?shù)字(Number)超級詳解
          Python隨機(jī)模塊22個函數(shù)詳解
          Python數(shù)學(xué)math模塊55個函數(shù)詳解二、String(字符串)Python字符串的45個方法詳解
          Pandas向量化字符串操作三、List(列表)超級詳解系列-Python列表全面解析
          Python輕量級循環(huán)-列表推導(dǎo)式四、Tuple(元組)Python的元組,沒想象的那么簡單五、Set(集合)全面理解Python集合,17個方法全解,看完就夠了六、Dictionary(字典)Python字典詳解-超級完整版七、內(nèi)置函數(shù)Python初學(xué)者必須吃透這69個內(nèi)置函數(shù)!八、正則模塊
          Python正則表達(dá)式入門到入魔
          筆記 | 史上最全的正則表達(dá)式八、系統(tǒng)操作Python之shutil模塊11個常用函數(shù)詳解Python之OS模塊39個常用函數(shù)詳解九、進(jìn)階模塊
          【萬字長文詳解】Python庫collections,讓你擊敗99%的Pythoner
          高手如何在Python中使用collections模塊掃描關(guān)注本號↓
          瀏覽 56
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线观看免费黄片网站 | 午夜福利爱爱爱 | www.欧美黑人大屌 | 强上app在线观看一区二区三区 | 人妻.少妇.欧美.亚洲.日韩 |