Python3 日期時間 相關模塊(time(時間) / datatime(日期時間) / calendar(日歷))


Python3 日期時間 相關模塊(time(時間) / datatime(日期時間) / calendar(日歷))

本文由 Luzhuo 編寫,轉發請保留該信息. 
原文: http://blog.csdn.net/Rozol/article/details/71307483


以下代碼以Python3.6.1為例 
Less is more!

#!/usr/bin/env python # coding=utf-8 __author__ = 'Luzhuo' __date__ = '2017/5/5' # timedemo.py 時間相關的模塊演示 # 演示的模塊:time(時間) / datatime(處理 日期&時間) / calendar(日歷) import time def time_demo(): curtime = time.time() # 獲取當前時間戳 time_str = time.ctime(curtime) # 轉為string格式 print(time_str) # => Fri May 5 18:28:08 2017 time_tup = time.localtime(curtime) # 轉為struct_time(tuple)格式 print(time_tup.tm_year) # => 2017 def time_func(): ''' time模塊處理時間的相關說明: 1. 部分系統無法處理很久之前或之后的日期和時間 (如:32系統通常時間到2038年為止) 2. UTC (/GMT) 為格林威治標准時間 (簡稱:世界時間); 3. DST 為夏令時 4. 格式化指示符: %Y(世紀年) / %m(月[01, 12]) / %d(日[01, 31]) / %H(時[00, 23]) / %M(分[00, 59]) / %S(秒[00, 61]) / %w(星期[0, 6]) %b(月E縮寫) %B(月E) / %a(星期E縮寫) / %A(星期E) / %I(12時[01, 12]) / %c(日期+時間) / %x(日期) / %X(時間) / %p(AM/PM) / %z(時區[-23:59,+23:59]) / %%('%') %j(年<-日[001, 366]) / %U(年<-星期[00, 53]) / %W(年<-周[00, 53]) 5. 星期日為一個星期周期的第一天 ''' # 時間戳 time_s = time.altzone # 夏令時與UTC的差值 time_s = time.timezone # (時區) 本地時間與UTC的差值 time_s = time.time() # 當前時間戳 (受系統時間影響) 單位:秒 ( => 1493986228.8606732 >> 1493986228s) time_s = time.mktime(time_tup) # 元組轉成時間 time_s = time.monotonic() # 單調始終的值 (不受系統時鍾更新的影響) 單位:秒 ( => 250075.796 >> 250075s) time_s = time.perf_counter() # (高分辨率)性能計數器 (包括睡眠時間) 單位:秒 ( => 552.1569544781966 >> 552s) # 元組(struct_time) [格式:(2008, 1, 1, 0, 0, 0, -1, -1, -1) >> (年, 月, 日, 時, 分, 秒, 星期, 年<-日, DST)] # gmtime([secs]) // 時間戳轉為UTC; 0: 開始0年的時間(1970年) / 無參:UTC / time_s:轉為世界時間 time_tup = time.gmtime(time_s) # localtime([secs]) // 時間戳轉為本地時間 time_tup = time.localtime(time_s) # strptime(string[, format]) 解析時間 time_tup = time.strptime('Tue Jan 01 00:00:00 2008', '%a %b %d %H:%M:%S %Y') # 字符串解析成時間 # struct_time time_year = time_tup.tm_year # 從struct_time中獲取數據, 其他省略 # 字符串 # asctime([t]) // 時間格式化 (系統樣式); 不傳參為當前時間 time_str = time.asctime(time_tup) # ctime([secs]) // 同asctime() time_str = time.ctime(time_s) # strftime(format[, t]) time_str = time.strftime("%Y-%m-%d-%H-%M-%S", time_tup) # 其他 time.sleep(1.1) # 線程睡眠 單位:s time_dst = time.daylight # 夏令時時區(0未定義) # =========================================== import datetime def datetime_demo(): datetime_dt = datetime.datetime.today() # 獲取當前日期和時間 datetime_str = datetime_dt.strftime("%Y/%m/%d %H:%M:%S") # 格式化日期時間 print(datetime_str) time_delta = datetime.timedelta(hours=-3) # 時間間隔 datetime_pre = datetime_dt + time_delta # 將時間提前12小時 print(datetime_pre.ctime()) # 將日期時間轉為日期 date = datetime_dt.date() print("現在是 {}年 {}月 {}日".format(date.year, date.month, date.day)) # 將日期時間轉為時間 time = datetime_dt.time() print("現在是 {}".format(time.isoformat())) # 將日期時間轉為時間戳 time_s = datetime_dt.timestamp() print("現在的時間戳: {}".format(time_s)) def datetime_func(): ''' 用於處理日期和時間 ''' timedelta_temp = datetime.timedelta(seconds=60, minutes=59, hours=23) date_temp = datetime.date.today() - datetime.timedelta(1) # === timedelta === # 內部只存儲: days日[-999999999, 999999999) / seconds秒 [0, 86399) / microseconds微秒(1E-6秒)[0, 999999) # milliseconds毫秒(1‰秒)[ == 1000 * microseconds ] / minutes分[ == 60 * seconds] / hours時[ == 3600 * seconds] / weeks周期[ == 7 * days] # timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) // 表示時間的間隔 timedelta = datetime.timedelta(1) time_total = timedelta.total_seconds() # 計算時間差的總秒數 ( => 86400.0 ) # 計算 boolean = timedelta == timedelta_temp # 時間是否相等 => True timedelta = timedelta + timedelta_temp # 加上 => timedelta(2) timedelta = timedelta - timedelta_temp # 減去 => timedelta(0) timedelta = timedelta * 10 # 乘以 => timedelta(10) timedelta = timedelta * 0.01 # 乘以浮點數 => timedelta(0, 864) fnum = timedelta / timedelta_temp # 除以 => 1.0 timedelta = timedelta / 10 # 除以整數 或 浮點數 (不能除以0) => timedelta(0, 8640) num = timedelta // timedelta_temp # 商(delta / 整數)(不能除以0) => 1 timedelta = timedelta % timedelta_temp # 余數 => timedelta(0) num, time_delta = divmod(timedelta, timedelta_temp) # (商, 余數) => (1, datetime.timedelta(0)) timedelta = +timedelta # 內存地址引用(沒用) timedelta = -timedelta # 取反 => timedelta(-1) timedelta = abs(time_delta) # 絕對值 strs = str(time_delta) # 格式化為[D day[s], ][H]H:MM:SS[.UUUUUU]字符串 => '1 day, 0:00:00' strs = repr(time_delta) # 格式化為datetime.timedelta(D[, S[, U]])字符串 => 'datetime.timedelta(1)' # === date === # date 可做字典的鍵, 所有date對象被為True # year年[MINYEAR, MAXYEAR] / month月[1, 12] / day日[1, 給定年月的最大天數] # date(year, month, day) # 公歷日歷中的日期, 兩個方向上無限延伸 date = datetime.date(2017, 5, 6) date = date.min # 最早日期 => date(1, 1, 1) date = date.max # 最晚日期 => date(9999, 12, 31) timedelta = date.resolution # 不相等日期之間最小差異 (1天) => timedelta(1) date_year = date.year # year年 [MINYEAR, MAXYEAR] date_month = date.month # month月 [1, 12] date_day = date.day # day日 [1, 給定年月的最大天數] date = datetime.date.today() # 當前本地日期 (類方法) => date(2017, 5, 6) date = datetime.date.fromtimestamp(time.time()) # 將時間戳轉為日歷 (類方法) => date(2017, 5, 6) date = datetime.date.fromordinal(12) # 返回公歷序數日期 (類方法) => date(1, 1, 12) # 計算 date = date + timedelta # 加 => date(2017, 5, 7) date = date - timedelta timedelta = date - timedelta # 日歷相減 => timedelta(1) # replace(year=None, month=None, day=None) date = date.replace(day=12) # 替換 => date(2017, 5, 12) num = date.toordinal() # date在公歷日歷中的序數 (從date.min開始數) num = date.weekday() # 周幾 (0:周日) num = date.isoweekday() # 周幾 (1:周一) year, week, weekday = date.isocalendar() # 返回年, 周數, 周幾 (year, week, weekday) (注:weekday == isoweekday) date_str = date.isoformat() # 格式化為‘YYYY-MM-DD’格式 => '2017-05-06' date_str = date.ctime() # 格式化為日期格式 => 'Sat May 6 00:00:00 2017' (注:時分秒均為0, 下同) date_str = date.strftime("%Y-%m-%d-%H-%M-%S") # 格式化為指定格式 # === datetime === # datetime 可做字典的鍵。所有datetime都為True # year年[MINYEAR, MAXYEAR] / month月[1, 12] / day日[1, 給定年月的最大天數] / hour時[0, 24) / minute[0. 60) / second秒[0, 60) / microsecond微秒[0, 1000000) # datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None) # 類方法 date_time = datetime.datetime.today() # 當前本地日期時間 => datetime(2017, 5, 6, 17, 51, 59, 124232) date_time = datetime.datetime.now() # 同today date_time = datetime.datetime.utcnow() # UTC日期和時間 date_time = datetime.datetime.fromtimestamp(time.time()) # 時間戳轉為datetime date_time = datetime.datetime.utcfromtimestamp(time.time()) # 時間戳轉為UTCdatetime date_time = datetime.datetime.fromordinal(12) # 公歷序數日期 date_time = datetime.datetime.strptime('Tue Jan 01 00:00:00 2008', '%a %b %d %H:%M:%S %Y') # 解析 # 實例方法 date = date_time.date() # 轉為date => date(2017, 5, 6) time = date_time.time() # 轉為time => time(19, 10, 46, 149016) time_s = date_time.timestamp() # 轉為時間戳 struct_time = date_time.timetuple() # 轉為 struct_time struct_time = date_time.utctimetuple() # replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]) // 替換 date_time = date_time.replace(year=2017) # => datetime(2018, 5, 6, 19, 10, 46, 149016) num = date_time.toordinal() # 公歷序數 num = date_time.weekday() # 周幾 (0:周日) num = date_time.isoweekday() # 周幾 (1:周一) year, week, weekday = date_time.isocalendar() # (year, week, weekday(1:星期一)) datetime_str = date_time.isoformat(sep='T') # 格式化, sep時間和日期分隔符 => '2017-05-06T19:10:46.149016' datetime_str = date_time.ctime() # 格式化 datetime_str = date_time.strftime("%Y-%m-%d-%H-%M-%S") # 格式化 # === time === # time可做字典的鍵, time視為True # Time表示一天中的本地時間,獨立於任何特定的日子 # hour時[0, 24) minute分[0, 60) second秒[0, 60) microsecond微秒[0, 1000000) # datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) time = datetime.time(18, 30, 59) time_t = time.min # 最早 => time(0, 0) time_t = time.max # 最晚 => time(23, 59, 59, 999999) time_t = time.resolution # 最小差值 => timedelta(0, 0, 1) num = time.hour num = time.minute mum = time.second mum = time.microsecond # replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]) time_t = time.replace(hour=17) # 替換 time_s = time.isoformat() # 格式化 => '18:30:59' time_s = time.strftime("%H-%M-%S") # 格式化 # =========================================== import calendar def calendar_demo(): calen_text = calendar.TextCalendar() # 打印月歷 calen_text.prmonth(2017, 5, w=0, l=0) # 打印年歷 calen_text.pryear(2017, w=2, l=1, c=6, m=3) def calendar_func(): ''' 日歷相關的操作 默認星期一作為一周的第一天, 可設置 ''' # === Calendar === # Calendar(firstweekday=0) // Calendar對象 firstweekday:一周的第一天,0周一(默認),6周日 calen = calendar.Calendar() calen_iter = calen.iterweekdays() # 迭代器,一周的星期數字 => 0 1 2 3 4 5 6 calen_iter = calen.itermonthdates(2017, 5) # 迭代器, x年x月中所有天 => 2017-05-01 2017-05-02 017-05-03 ... calen_iter = calen.itermonthdays2(2017, 5) # 迭代器, x年x月中所有(日,星期) => (1, 0) (2, 1) (3, 2) ... calen_iter = calen.itermonthdays(2017, 5) # 迭代器, x年x月中的所有天 => 1 2 3 ... calen_iter = calen.monthdatescalendar(2017, 5) # 迭代器, x年x月中data(年,月,日)對象 => date(2017, 5, 1) date(2017, 5, 2) ... calen_iter = calen.monthdays2calendar(2017, 5) # 迭代器, x年x月中(日,星期)的周列表 => [(1, 0), (2, 1) ...] [ ... ] ... calen_iter = calen.monthdayscalendar(2017, 5) # 迭代器, x年x月中日的周列表 => [1,2,3 ...] [...] ... calen_lists = calen.yeardatescalendar(2017, width=3) # x年所有data(年,月,日)對象的月列表 calen_lists = calen.yeardays2calendar(2017, width=3) # x年所有(日,星期)的月列表 calen_lists = calen.yeardayscalendar(2017, width=3) # x年所有日的月列表 # === TextCalendar === # TextCalendar(firstweekday=0) // 純文本的日歷 calen_text = calendar.TextCalendar() calen_str = calen_text.formatmonth(2017, 5, w=0, l=0) # x年x月所有日 calen_text.prmonth(2017, 5, w=0, l=0) # (打印) x年x月所有日 calen_str = calen_text.formatyear(2017, w=2, l=1, c=6, m=3) # x年所有日 calen_text.pryear(2017, w=2, l=1, c=6, m=3) # (打印) x年所有日 # === HTMLCalendar === # HTMLCalendar(firstweekday=0) // HTML的日歷 calen_html = calendar.HTMLCalendar() calen_str = calen_html.formatmonth(2017, 5, withyear=True) # x年x月的所有日 calen_str = calen_html.formatyear(2017, width=3) # x年所有日 calen_str = calen_html.formatyearpage(2017, width=3, css='calendar.css', encoding=None) # (完整編碼) x年所有日 # === calendar 模塊的函數 === calendar.setfirstweekday(calendar.SUNDAY) # 設置每周開始的工作日(默認:0周一,6周日),如設置星期天為第一個工作日(calendar.SUNDAY) 參數:MONDAY / TUESDAY / WEDNESDAY / THURSDAY / FRIDAY / SATURDAY / SUNDAY num = calendar.firstweekday() # 返回每周的第一天的星期 boolean = calendar.isleap(2017) # x年是否為閏年 num = calendar.leapdays(2010, 2020) # x年到y年的閏年數 num = calendar.weekday(2017, 5, 6) # x年x月x日的星期幾 strs = calendar.weekheader(1) # 星期E名, 1為名字長度 weekday, days = calendar.monthrange(2017, 5) # x年x月 (星期, 月天數) calen_lists = calendar.monthcalendar(2017, 5) # x年x月的月歷 calen_lists = calendar.prmonth(2017, 5, w=0, l=0) # x年x月的日歷 calen_strs = calendar.month(2017, 5, w=0, l=0) # 月歷 calendar.prcal(2017, w=0, l=0, c=6, m=3) # (打印) 整年日歷 calen_strs = calendar.calendar(2017, w=2, l=1, c=6, m=3) # 整年日歷 time_s = calendar.timegm(time.gmtime(time.time())) # 時間元組 轉為 時間戳 calen_iter = calendar.day_name # 迭代器, 星期E名稱 calen_iter = calendar.day_abbr # 迭代器, 星期E縮寫名稱 calen_iter = calendar.month_name # 迭代器, 月E名稱 calen_iter = calendar.month_abbr # 迭代器, 月E縮寫名稱 if __name__ == "__main__": time_demo() datetime_demo() calendar_demo() # time_func() # datetime_func() # calendar_func()

 


免責聲明!

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



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