Python學習筆記:Python的時間操作(time,datetime,timedelta,calendar)


做項目的時候,有一個簡單需求,就是取到當前時間5年后的某個時間點,這個要怎么做?

這個不是簡單的加5年時間,需要庫里有自動識別哪一年是閏年,最后返回准確結果。

看起來簡單的需求,但因為對Python類庫不熟悉,可能被多個時間對象搞懵!

唯一的辦法,只能把python中所有關於時間的模塊全部學習一遍,以下記錄學習的筆記。

通過學習,得出解決這個問題的方法:

from datetime import datetime
from datetime import timedelta
from calendar

# 方法一、只需要將365*5就是五年的天數,但這里未考慮到閏年的情況
# 如果能判斷5年中哪一些是閏年再加相應天數就可以得到正確的天數總和

dt = datetime.now()
td1 = timedelta(days=365*5) # 這里的365不是固定的,不能這樣寫
print(dt+td1)

# 方法二、如果剛好碰上今年是閏年的2月29日,如果5年后又正好不是閏年,2月份沒有29天,那么就會報錯,所以還是要判斷閏年。
d1 = date.today()
print(d1.replace(year=d1.year+5))

# 方法三、可以用到calendar模塊中的isleap(year)方法,這樣就沒問題了!
dt1 = datetime.now()
days = 0
for i in range(dt1.year+1,dt1.year+2):
    # 判斷是否是閏年
    if calendar.isleap(i):
        days += 366
    else:
        days += 365
print(dt1 + timedelta(days=days))

 

 

以下重點內容標紅顯示 

 

一、背景知識介紹:

 

1、時間是人類規定的產物,與長度單位是一個道理,米這個單位也是人類發明的。簡單說就是地球自轉1圈為1天,地球饒太陽公轉1圈為1年,而且根據公轉自轉度量時間都是不可靠的(因為非勻速無法准確度量),關鍵是找到勻速的度量工具。

  歷史上時間計量的方法,比如:

    • 太陽時:以太陽為基礎的相對於原子時不十分精准的時間
    • 歷書時:描述天體運動的方程式中采用的時間﹐或天體歷表中應用的時間,已經被原子時替代,不多做討論。
    • 格林威治時間標准時間(GMT)以本初子午線的平子夜起算的平太陽時,1960年以前曾作為基本時間計量系統被廣泛應用,因為地球自轉非勻速,所以並不是一個很好的時間度量系統,已經被原子時替代。但是一些原則卻被保留了下來,比如將世界分為24個時區。
    • 協調世界時(UTC)這是現在主要用的時間系統,為了保證時間的勻速統一,采用原子正常衰變的時間做為基准來度量時間(具體理論不深究),由原子鍾提供原子時,然后對世界時進行糾正,在適當的實際加減秒數以達到一致。所以,在不需要精確到秒的情況下,通常將GMT 和UTC 視作等同。
    • 中國屬於UTC+8區,也就是東八區,需要在UTC時間的基礎上加8小時得到北京時間。
    • 夏令時:為了節約能源,人為將時鍾調快的行為,這是非普遍行為所以在程序中可以不考慮,在中國已經廢除了這個制度。如果一定要考慮這個因素可以用到tzinfo對象,因只使用簡單時間所以本文未對tzinfo對象做研究。
    • ISO8601 :國際標准化組織制定的ISO8601國際標准,是日期和時間的表示方法。比如:2004-05-03T17:30:08+08:00,中間的T代表間隔符,最后的+08:00代表時差。
    • 簡單型時間:不考慮時區、夏時令等因素,而僅通過運行程序所在地獲得時間的返回值。簡單型對象更易於理解和使用,代價則是忽略了某些現實性考量。推薦使用!
    • 感知型時間:考慮時區、夏時令等因素,將所有情況都考慮進去后得到矯正的時間值,其用來表示一個沒有解釋空間的固定時間點。python提供一個抽象類接口tzinfo,通過實現其子類來完善時間,datetime模塊只提供了一個tzinfo類,即timezone類。

2、為什么要知道這些背景知識?

  因為Python中出現很多關於時間的術語,比如UTC,如果一個方法返回的是UTC時間,如果不知道以上知識,就無法對返回值有預期。

 

二、Python 的時間類庫概述:

  • time模塊:包含時間的訪問和轉換函數,此模塊包含一些底層的接口,比如讓線程休眠的sleep(),還有提取cpu時間的方法。如果要實現更復雜時間操作,可以用到下面幾個對象。
  • timedelta對象:這是一個代表時間間隔的對象,可以對時間進行計算,還支持與datedatetime對象進行特定的相加和相減運算
  • date對象:代表年、月、日的日期對象,也就是說該對象重點操作對象是年月日,忽略時分秒。兩個date對象之間,或者date對象和timedalta對象之間,可以做加減運算,可以比大小。
  • time對象:代表某日的(本地)時間,它獨立於任何特定日期,並可通過 tzinfo 對象來調整。(tzinfo 對象涉及到時區和夏令時等概念,本文不做討論)
  • datetime對象:對象是包含來自 date 對象和 time 對象的所有信息的單一對象。意味着我們大部分情況下只需要用這個對象即可。
  • calendar模塊:這個模塊讓你可以輸出日歷,它還提供了其它與日歷相關的實用函數。
  • 類繼承關系:
    object
        timedelta
        tzinfo
            timezone
        time date datetime

     

 

三、time 模塊:包含時間的訪問和轉換功能,time模塊不同於datetime中的time對象

  1、class time.struct_time:為 gmtime() 、 localtime() 和 strptime()的返回值 。它是帶有 named tuple 接口的對象:可以通過索引和屬性名訪問值。 存在以下值:    

        

  2、時間戳類型,形式是從 epoch 開始的秒數(浮點型 float),epoch的值可以用time.gmtime(0)查看,一般是1970年1月1日0時開始。

  3、字符串類型,形式是字符串,這里包含了時間格式轉換成自定義格式字符串的各種函數。

  4、函數介紹:

    • asctime([t]):struct_time轉字符串,[t]為struct_time類型,不提供此參數則默認用localtime()的值,返回結果如:Sun Jun 2023:21:05 2020
    • ctime([secs]):將時間戳類型轉字符串,[secs]為時間戳秒數,如果不提供則默認以time.time()的值,ctime(secs)等價於asctime(localtime(secs)),返回結果如:Sun Jun 2023:21:05 2020
    • gmtime([secs]):將時間戳類型轉struct_time類型,注意返回結果是UTC時間,也就是世界標准是時間,不是本地時間,如北京時間是UTC+8小時得到的。[secs]如果不提供則用time.time()的值,反向操作用calendar.timegm()
    • localtime([secs]):同上,將時間戳類型轉struct_time類型,區別在於localtime返回的是本地時間,比如北京時間。
    • mktime(t):將struct_time類型轉成時間戳類型,是localtime()的逆函數,是本地時間,不是UTC時間
    • monotonic() :返回一個float秒數數值,且不受系統更新時間影響,即如果把系統時間改了那么用time()返回的是修改后的時間戳秒數,因為monotonic()不是從1970-1-1開始的,這就能用來計算兩個monotonic()秒數的間隔。
    • monotonic_ns() :同上,返回int納秒
    • sleep(secs):暫停執行調用線程達到給定的秒數
    • strftime(format[, t]):struct_time類型轉字符串,format字符格式化是必須要指定的(格式如下表),stuct_time不指定的話默認用localtime()的值:   

                              < 圖2 >

    • strptime(string[, format]):字符串轉struct_time類型,format 參數同上,string 和 format 都必須是字符串。
    • time() :返回以float數表示的從 epoch 開始的秒數的時間值,epoch的值可以用gmtime(0)獲得,gmtime()和localtime()默認使用time(),前者返回UTC時間,后者返回本地時間。

 

 四、timedelta模塊:這是一個代表時間間隔的對象,可以對時間進行計算

  1、timedelta對象的標准化:timedelta會將輸入的值都歸結到天數上,如:timedelta(days=50,seconds=27,microseconds=10,milliseconds=29000,minutes=5,hours=8,weeks=2),將得到datetime.timedelta(days=64, seconds=29156, microseconds=10)的結果

  2、支持timedelta對象對象之間的運算:

    

  3、支持timedelta對象之間用關系運算符計算:

>>> from datetime import timedelta
>>> delta1 = timedelta(seconds=57)
>>> delta2 = timedelta(hours=25, seconds=2)
>>> delta2 != delta1
True
>>> delta2 == 5
False

##########################################


>>> delta2 > delta1
True
>>> delta2 > 5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'datetime.timedelta' and 'int'

  4、timedelta 對象還支持與 date 和 datetime 對象進行特定的相加和相減運算:這在下面的date模塊中介紹。

  5、timedelta.total_seconds():返回timedelta對象所表示的時間段以秒為單位的數值。 

 

五、date模塊:代表年、月、日的日期對象,也就是說該對象重點操作對象是年月日,忽略時分秒。兩個date對象之間,或者date對象和timedalta對象之間,可以做加減運算,可以比對大、小和相等關系

  1、函數介紹:

    • today():返回當前本地日期,比如:date.today(),返回2020-04-14,相當於date.fromtimestamp(time.time())
    • fromtimestamp(timestamp):返回時間戳格式的日期字符串,timestamp為時間戳,是必填參數,比如:date.fromtimestamp(time.time()),返回:2020-04-14
    • fromordinal(days):返回對應於預期格列高利歷序號的日期。傳入一個從公元1年1月1日開始計算的天數,返回一個具體的年份,現在還沒想到應用場景。比如:date.fromordinal(2),返回:0001-01-02。也就是公元1年1月1日。
    • fromisoformat(date_string):返回一個字符串日期的date對象,只支持 YYYY-MM-DD 格式,是date.isoformat() 的逆操作方法,比如:fromisoformat(“2010-04-20”),返回:datetime.date(2019, 12, 4)
    • fromisocalendar(year,week,day):返回指定時間的日期,year為年份,week為此年份第幾個星期(值范圍:平年是1~52,閏年是1~53,閏年是52周加2天所以是53),day為此星期的星期幾(值范圍:1~7)
    • 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)
    • timetuple():返回struct_time類型,即 time.localtime() 所返回的類型。但只有year,month,days。另外hours, minutes 和 seconds 值均為 0
    • toordinal():與fromordinal(days)是相對應的一對函數,返回日期的對應的從公元1年1月1日開始的天數。比如:date(2020,4,14).toordinal(),返回:737529
    • isoweekday():返回星期幾,1~7,0代表星期一,以此類推。比如:date(2020,4,14).isoweekday(),返回:1
    • isocalendar():返回一個 3 元組 (ISO 年份, ISO 周序號, ISO 周日期),比如:date(2020,4,14).isocalendar(),返回:(2020, 16, 2),代表2020年第16周第二天
    • isoformat():返回格式 YYYY-MM-DD 來表示日期的字符串,這是 date.fromisoformat() 的逆操作。比如:date.today().isoformat(),返回:2020-04-14
    • ctime():返回一個日期字符串,等效於:time.ctime(time.mktime(d.timetuple())),比如:date(2002, 12, 4).ctime(),返回:'Wed Dec 4 00:00:00 2002'
    • replace(year=self.year, month=self.month, day=self.day):替換年月日返回一個新的date對象。
    • strftime(format):返回指定格式的時間字符串。format格式如上面< 圖2 >,比如:date.today().strftime("%d/%m/%y"),返回:'11/03/02'

   2、運算:支持與timedalta對象的運算。

    

 

   3、date代碼示例

    • # #計算距離特定事件天數的例子:

      >>> import time >>> from datetime import date >>> today = date.today() >>> my_birthday = date(today.year, 6, 24) >>> if my_birthday < today: # 如果生日已經過去,則創建明年的生日 ... my_birthday = my_birthday.replace(year=today.year + 1) >>> my_birthday datetime.date(2008, 6, 24) >>> time_to_birthday = abs(my_birthday - today) >>> time_to_birthday.days 202 #明年生日距離今天的天數

       

    • >>> from datetime import date
      >>> # 輸出特定格式的日期字符串,注意這里用到的縮寫格式字符
      >>>print('The {1} is {0:%d}, the {2} is {0:%B}.'.format(d.today(), "day", "month"))
      
      輸出:The day is 15, the month is April.

 

 

六、time對象:代表某日的(本地)時間,它獨立於任何特定日期,並可通過 tzinfo 對象來調整。(tzinfo 對象涉及到時區和夏令時等概念,本文不做討論)

  1、函數介紹:

    • 構造方法datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0):這個對象只有時分秒和微秒,沒有年月日,tzinfo代表時區調整對象,fold代表夏時令。
    • 類方法time.fromisoformat(time_string):返回對應於 time.isoformat() 所提供的某種 time_string 格式的 time,比如:
      >>> from datetime import time
      
      >>> 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.replace(hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0) :修改參數將返回一個代表新值的time對象。 

    • 對象方法time.isoformat(timespec='auto'):返回時間的字符串,可以通過timespec選擇相應的部分返回,比如:timespec='hours': 以兩個數碼的 HH 格式。 
    • 對象方法time.strftime(format):指定格式並且返回時間字符串,格式化字符參考<圖3>。

   2、time對象計算:time 對象支持 time 與 time 的比較,當 a 時間在 b 之前時,則認為 a 小於 b

>>>from datetime import time

>>>t1 = time(1,2,4,333)
>>>t2 = time(1,2,4,333)
>>>if t1 == t2:
>>>    print("t1==t2")
>>>elif t1 > t2:
>>>    print("t1>t2")
>>>else:
>>>    print("t1<t2")

結果是:t1==t2

 

七、datetime對象:對象是包含來自 date 對象和 time 對象的所有信息的單一對象。意味這我們只需要用這個對象即可。

 

  1、函數介紹:

    • 構造器datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0):year, month, day是必須的參數。tzinfo代表時區,fold代表夏令時,這兩者可以忽略,返回一個datetime對象 。比如:print(datetime(2001,1,1))
    • 類方法datetime.today():返回當地時間的datetime對象,等價於datetime.fromtimestamp(time.time()) 和 now()方法,但此方法不涉及時區,而now()可以設置時區。
    • 類方法datetime.now(tz=None):返回當地時間的datetime對象,tz為時區未指定跟today()一樣,此方法比time.time()返回更高精度的時間(微妙級別100萬精度),此函數可以替代today()utcnow()。比如:datetime.now()
    • 類方法datetime.utcnow():返回表示當前UTC時間的datetime對象,UTC時間和當地時間的區別在於時區,可以參考前文背景分析。
    • 類方法datetime.fromtimestamp(timestamp, tz=None):通過時間戳返回datetime對象。
    • 類方法datetime.utcfromtimestamp(timestamp):通過時間戳返回UTC時間的datetime對象。
    • 類方法datetime.fromordinal(ordinal):返回對應於預期格列高利歷序號的datetime對象,ordinal代表從公元1年1月1日開始的int型天數,但時分秒都為0。比如:print(datetime.fromordinal(2)),返回:0001-01-02 00:00:00
    • 類方法datetime.combine(date, time, tzinfo=self.tzinfo):返回date對象和time對象的datetime對象,比如:
      >>>d1 = datetime.today()
      >>>print(d1.date())
      2020-04-15
      >>>print(d1.time()) 14:08:41.000856 >>>d2 = datetime.today() >>>print(d2.date()) 2020-04-15
      >>>print(d2.time()) 14:08:41.000856 >>>if d2 == datetime.combine(d1.date(), d1.time(), d1.tzinfo): >>> print("這兩個datetime對象相等") 結果:這兩個datetime對象相等
    • 類方法datetime.fromisoformat(date_string):從字符串轉成datetime對象,字符串參數可以由date.isoformat() 和 datetime.isoformat() 來提供,比如:
      >>> 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):提供年、該年第幾個星期、該星期幾日,返回一個datetime對象,這是函數 datetime.isocalendar() 的逆操作,比如:datetime.fromisocalendar(2000, 1, 1),返回:2000-01-03 00:00:00
    • 類方法datetime.strptime(date_string, format):字符串轉datetime對象。比如:
      >>>datetime.strptime("2001-01-01", "%Y-%m-%d")
      2001-01-01 00:00:00
      
      
      >>># 等價於下面的寫法,這里將time和datetime對象串聯起來了
      >>>print(datetime(*(time.strptime("2001-01-01", "%Y-%m-%d")[0:6])))
      2001-01-01 00:00:00
    • 對象方法datetime.date():返回具有同樣 year, month 和 day 值的 date 對象。比如:print(datetime.now().date()),返回:2020-04-15
    • 對象方法datetime.time():返回具有同樣 hour, minute, second, microsecond 和 fold 值的 time 對象。比如:print(datetime.now().time()),返回:15:52:16.589417
    • 對象方法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):替換年月日時分秒微秒並且返回一個新的datetime類型,需要注意的是,這個函數是會識別閏年的,如下:
      >>>d1 = datetime(2020,2,29) #2020年為閏年2月有29天
      >>>print(d1)
      >>>print(datetime.replace(d1,year=d1.year+5)) #如果加5年也就是2025年不是閏年,則2月沒有29天,會報錯!
      
      結果:ValueError: day is out of range for month
    • 對象方法datetime.astimezone(tz=None):返回一個新時區的datetime類型。
    • 對象方法datetime.timetuple():返回一個time.struct_time類型。
    • 對象方法datetime.toordinal():返回datetime從公元1年1月1日開始的天數。比如:print(datetime.now().toordinal()),返回:737530
    • 對象方法datetime.timestamp():返回datetime的時間戳
    • 對象方法datetime.isoweekday():返回星期幾
    • 對象方法datetime.isocalendar():返回一個 3 元組 (ISO 年份, ISO 周序號, ISO 周日期)。 等同於 self.date().isocalendar()
    • 對象方法datetime.isoformat():返回ISO格式的日期UTC字符串(日期和時間中間用T割開,如果不想有符號間隔可以用isoformat(" ")),d1.__str__()等價於d1.isoformat(" ")等價於str(d1)
    • 對象方法datetime.ctime():返回一個表示日期和時間的字符串,比如:print(d1.ctime()),返回:Sat Feb 29 10:02:02 2020
    • 對象方法datetime.strftime(format):返回格式字符串所指明的代表日期和時間的字符串,格式字符串如上圖<圖3>

 

   2、datetime對象的計算

 

    

 八、calendar對象:這個模塊讓你可以輸出日歷,它還提供了其它與日歷相關的實用函數。

  1、函數介紹:

    • 構造函數calendar.Calendar(firstweekday=0):創建一個 Calendar 對象。 firstweekday 是一個整數,用於指定一周的第一天。 0 是星期一(默認值),6 是星期天。
    • 對象方法c1.iterweekdays():返回一個迭代器,迭代器的內容為一星期的數字。迭代器的第一個值與 firstweekday 屬性的值一至。
    • 對象方法c1.itermonthdates(year, month):返回一個迭代器,迭代器的內容為 year 年 month 月(1-12)的日期。這個迭代器返回當月的所有日期 ( datetime.date 對象),日期包含了本月頭尾用於組成完整一周的日期,其實就是紙質日歷完整一頁的內容
    • 對象方法c1.itermonthdays(year, month):返回一個迭代器,返回的日期為當月每一天的日期對應的天數序號。不在當月的日期,天數序號顯示為 0。備注:完整一頁紙質日歷頭尾都有一些天數不屬於這個月,可能是上個月,也可能是下個月,這些不屬於本月的就顯示0,屬於本月的按本月第幾天排序。
    • 對象方法c1.itermonthdays2(year, month):返回一個迭代器,由輸出天數序號和星期幾組成的元組,格式為:(不在本月為0,星期幾),(天數序號,星期幾),(天數序號,星期幾),不在當月的日期,天數序號顯示為0。
    • 對象方法c1.itermonthdays3(year, month):返回一個迭代器,由年,月,日組成的元組。格式為:(年,月,日),(年,月,日),(年,月,日)
    • 對象方法c1.itermonthdays4(year, month):返回一個迭代器,由年,月,日,星期幾組成的元組。格式為:(年,月,日,星期幾),(年,月,日,星期幾),(年,月,日,星期幾)
    • 對象方法c1.monthdatescalendar(year, month):返回一個表示指定年月的周列表。周列表由七個 datetime.date 對象組成。格式為:[datetime.date(2020, 3, 30), datetime.date(2020, 3, 31), datetime.date(2020, 4, 1)...]
    • 對象方法c1.monthdays2calendar(year, month):返回一個表示指定年月的周列表。周列表由七個代表日期的數字和代表周幾的數字組成的二元元組。格式如下:
      import  calendar
      
      cal  = calendar.Calendar(firstweekday=0)
      for i in cal.monthdays2calendar(year=2020,month=4):
          print(i)
      
      輸出如下:打印了一個日歷格式,X軸代表星期幾
      [(0, 0), (0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
      [(6, 0), (7, 1), (8, 2), (9, 3), (10, 4), (11, 5), (12, 6)]
      [(13, 0), (14, 1), (15, 2), (16, 3), (17, 4), (18, 5), (19, 6)]
      [(20, 0), (21, 1), (22, 2), (23, 3), (24, 4), (25, 5), (26, 6)]
      [(27, 0), (28, 1), (29, 2), (30, 3), (0, 4), (0, 5), (0, 6)]
    • 對象方法c1.monthdayscalendar(year, month):返回一個表示指定年月的周列表。周列表由七個代表日期的數字組成。格式如下:
      import  calendar
      cal  = calendar.Calendar(firstweekday=0)
      for i in cal.monthdayscalendar(year=2020,month=4):
          print(i)
      
      輸出如下:
      [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, 0, 0, 0]
    • 對象方法c1.yeardatescalendar(year, width=3):返回一個年列表,里面最小的元素是date類型代表天,由天組成星期列表->由星期列表組成月列表->由月列表組成年列表->最后返回。width=3代表月份列表有幾個月組成,默認3個月組成一個月份列表
    • 對象方法c1.yeardays2calendar(year, width=3):返回一個年列表,里面最小的元素是天序號和星期幾組成的元組,由元組組成星期列表->由星期列表組成月列表->由月列表組成年列表->最后返回。width=3的含義同上。
    • 對象方法c1.yeardayscalendar(year, width=3):返回一個列表,里面最小的元素是天數序號(非本月日期標識為0),由天序號組成星期列表->由星期列表組成月列表->由月列表組成年列表->最后返回。width=3的含義同上。
    • 類方法calendar.TextCalendar(firstweekday=0):返回一個TextCalendar對象,可以使用這個類生成純文本日歷,詳情參考:https://docs.python.org/zh-cn/3/library/calendar.html#calendar.TextCalendar
    • 類方法calendar.HTMLCalendar(firstweekday=0):返回一個HTMLCalendar對象,可以使用這個類生成 HTML 日歷。,詳情參考:https://docs.python.org/zh-cn/3/library/calendar.html#calendar.HTMLCalendar
    • 類方法calendar.isleap(year):返回一個bool值,可用來判斷是否是閏年。
    • 類方法calendar.leapdays(y1y2):返回y1,y2之間的閏年的年數。
    • 類方法calendar.weekday(yearmonthday):返回某年某月某日是星期幾,結果要加1用來表示中文星期幾。
    • 類方法calendar.weekheader(n):返回一個包含星期幾的縮寫名的頭。 n 指定星期幾縮寫的字符寬度
    • 類方法calendar.c(yearmonth):返回第一天是星期幾和這個月的天數的元組。
    • 類方法calendar.monthcalendar(yearmonth):返回表示一個月的日歷的矩陣。每一行代表一周;此月份外的日子由零表示。
    • 類方法calendar.prmonth(theyearthemonthw=0l=0):打印由 month() 返回的一個月的日歷。
    • 類方法calendar.month(theyearthemonthw=0l=0):返回月份日歷。使用 TextCalendar 類的 formatmonth() 以多行字符串形式。
    • 類方法calendar.prcal(yearw=0l=0c=6m=3):返回整年日歷。
    • 類方法calendar.timegm(tuple):返回時間戳,參數是struct_time類型,他是 time.gmtime() 的逆函數。
    • 類屬性calendar.day_name:返回數組,在當前語言環境下表示星期幾的數組。
    • 類屬性calendar.day_abbr:返回數組,在當前語言環境下表示星期幾縮寫的數組。
    • 類屬性calendar.month_name:返回數組,在當前語言環境下表示一年中月份的數組。
    • 類屬性calendar.month_abbr:返回數組,在當前語言環境下表示一年中月份縮寫的數組

 


[參考資料]

協調世界時:https://baike.baidu.com/item/%E5%8D%8F%E8%B0%83%E4%B8%96%E7%95%8C%E6%97%B6/787659?fr=aladdin

ISO 8601時間格式:https://baike.baidu.com/item/ISO%208601/3910715?fr=aladdin

Python的time模塊:https://docs.python.org/zh-cn/3/library/time.html

Python的datetime模塊:https://docs.python.org/zh-cn/3/library/datetime.html

Python的calendar模塊:https://docs.python.org/zh-cn/3/library/calendar.html#module-calendar

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM