1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 2084字,需瀏覽 5分鐘

         ·

        2021-10-09 15:03

        datetime模塊提供了用于處理日期和時間的類和對應的方法,一般用于處理年、月、日、時、分、秒的統(tǒng)計和計算等需求。在支持日期時間數(shù)學運算的同時,實現(xiàn)的關注點更著重于如何能夠更有效地解析其屬性用于格式化輸出和數(shù)據(jù)操作。

        學習該模塊,首先要有一個概念:日期和時間,要不然會混亂,這里進行狹義的理解即可:日期是日期,時間是時間,日常生活中有時候并沒有很好的去區(qū)分。

        日期:年月日,如 20210612
        時間:時分秒,如 20:45:50
        Python標準庫中包含日期(date)和時間(time)的數(shù)據(jù)類型,還有日歷方面的功能。要比較系統(tǒng)的學習該模塊,需要了解下面的兩個概念。
        UTC(全球標準時間):是全球范圍內(nèi)計時的科學標準,它基于精心維護的原子鐘,在全球范圍內(nèi)精確到微秒,由于英文(CUT)和法文(TUC)的縮寫不同,作為妥協(xié),簡稱UTC。作為全球最精確的時間系統(tǒng),天文學家、航海家、“太空跟蹤網(wǎng)”(DSN) 以及其他科學性學科都使用它,它的參考點是英國格林威治標準時間(GMT):地球本初子午線的午夜,也是 UTC 的午夜 (00:00:00.000000)。本地時間是根據(jù)地球上不同時區(qū)所處的位置調(diào)整 UTC 得來的,比如當美國加州的太平洋時間為正午 12:00:00 時,UTC 為 20:00:00。
        夏令時(DST):表示為了節(jié)約能源, 人為規(guī)定時間的意思。也叫夏時制,夏時令(Daylight Saving Time:DST),又稱"日光節(jié)約時制"和"夏令時間”,在這一制度實行期間所采用的統(tǒng)一時間稱為“夏令時間”。一般在天亮早的夏季人為將時間調(diào)快一小時,可以使人早起早睡,減少照明量,以充分利用光照資源,從而節(jié)約照明用電。各個采納夏時制的國家具體規(guī)定不同。全世界有近110個國家每年要實行夏令時。
        感知型”和“簡單型”對象:日期和時間對象可以根據(jù)它們是否包含時區(qū)信息而分為“感知型”和“簡單型”兩類。充分掌握應用性算法和政治性時間調(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ù),提供了用于處理日期和時間的類和對應的方法,一般用于處理年、月、日、時、分、秒的統(tǒng)計和計算等需求,且這些類型的對象都是不可變的。最常用的是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
        一個描述時區(qū)信息對象的抽象基類。用來給datetime和time類提供自定義的時間調(diào)整概念(例如處理時區(qū)和/或夏令時)。
        datetime.timezone
        一個實現(xiàn)了tzinfo抽象基類的子類,用于表示相對于世界標準時間(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<=?給定年月對應的天數(shù)
        如果參數(shù)不在這些范圍內(nèi),則拋出 ValueError 異常。
        import?datetimet?=?datetime.date(2019,8,26)print(type(t))print(t.day,t.month,t.year)?#?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()

        作用:返回當前的本地日期,等價于date.fromtimestamp(time.time())。
        from?datetime?import?date?date.today()datetime.date(2021,?7,?4)

        date.fromtimestamp()

        作用:返回對應于POSIX時間戳的當?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()

        作用:返回對應于預期格列高利歷序號的日期,其中公元 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()

        作用:返回一個對應于以?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 所對應 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()

        作用:返回一個具有同樣值的日期,除非通過任何關鍵字參數(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 旗標值為 -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()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 個完整星期構成,每個星期開始于星期一結束于星期日。一個 ISO 年的第一個星期就是(格列高利)歷法的一年中第一個包含星期四的星期。這被稱為 1 號星期,這個星期四所在的 ISO 年與其所在的格列高利年相同。
        例如,2004 年的第一天是星期四,因此 ISO 2004 年的第一個星期開始于 2003 年 12 月 29 日星期一,結束于 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 版更改:?結果由元組改為 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 標準的平臺上。
        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,將給定格式的日期時間對象轉換為字符串。日期時間對象=>字符串,控制日期時間對象的輸出格式,date、datetime、time對象都支持strftime(format)?方法,可用來創(chuàng)建由一個顯式格式字符串所控制的表示時間的字符串。要獲取格式指令的完整列表,查看文末列表。
        用法:date.strftime(format)
        掌握了這個方法,隨心所以的轉換日期格式
        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()?進行格式化成為可能。雖然不建議使用這個裝逼,但是遇到別人裝逼的時候我們得知道。要獲取格式指令的完整列表,請看文末附表
        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?
        如果 date1 的時間在 date2 之前則認為 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?

        • 0?<=?minute?

        • 0?<=?second?

        • 0?<=?microsecond?

        • fold?in?[0,?1]

        如果給出一個此范圍以外的參數(shù),則會引發(fā)?ValueError。 所有參數(shù)值默認為?0,只有?tzinfo?默認為?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?對象并不支持算術運算。

        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?構造器的對象,如果沒有傳入值則為?None。

        t.tzinfo

        time.fold

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

        t.fold0

        4、time實例方法

        time.replace()

        作用:返回一個具有同樣屬性值的?time,除非通過任何關鍵字參數(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()

        作用:返回對應于?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.'

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

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

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            婷婷色亚洲| 下乡干部玩农村妇女 | 成熟的老女人黄色一级片 | 打工人的一级女毛片 | 女人一级毛片免费看 | 日韩三级电影在线免费观看 | 国产69精品在线观看 | 国产精品成人在线观看 | 做爰gay羞羞看片 | 丰满老女人乱妇dvd在线播放 |