主頁 > 後端開發 > Python學習筆記:Python的時間操作(time,datetime,timedelta,calendar)

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

2020-10-05 23:53:33 後端開發

做專案的時候,有一個簡單需求,就是取到當前時間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

 

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/158286.html

標籤:Python

上一篇:Python練習題2.5求奇數分之一序列前N項和(存在問題)

下一篇:密碼類

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more