時間模組和時間工具
阿新 • • 發佈:2018-12-21
一、time模組
三種格式
時間戳時間:浮點數 單位為秒
時間戳起始時間:
1970.1.1 0:0:0 英國倫敦時間
1970.1.1 8:0:0 我國(東8區)
結構化時間:元組(struct_time)
格式化時間:str資料型別的
1、常用方法
import time time.sleep(secs) 推遲指定的時間執行,單位是秒 for i in range(3): time.sleep(1) print(i)
2、表示時間的三種方式
時間戳(timestamp)、元組(struct_time)、格式化(str_time)的時間字串1. 時間戳(timestamp) :通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。 我們執行“type(time.time())”,返回的是float型別。 print(time.time()) # 1536050072.5732844(1970年1月1日00:00:00到此刻執行time.time()的時間) 2. 結構化時間(struct_time) :struct_time元組共有9個元素共九個元素:(年,月,日,時,分,秒,一週中第幾天,一年中第幾天,夏令時) struct_time = time.localtime() # 我國的時間 print(struct_time)# time.struct_time(tm_year=2018, tm_mon=9, tm_mday=4, tm_hour=16, tm_min=40, tm_sec=1, tm_wday=1, tm_yday=247, tm_isdst=0) struct_time = time.gmtime() # 倫敦的時間 print(struct_time) # time.struct_time(tm_year=2018, tm_mon=9, tm_mday=4, tm_hour=8, tm_min=40, tm_sec=1, tm_wday=1, tm_yday=247, tm_isdst=0)3. 格式化時間(Format_string): fmt1 =time.strftime('%H:%M:%S') # 時分秒(全大寫) fmt2 =time.strftime('%Y-%m-%d') # 年月日(年可大寫可小寫,月日小寫) fmt3 =time.strftime('%y-%m-%d') # 年月日 fmt4 =time.strftime('%c') # 本地相應的日期表示和時間表示 print(fmt1) # 16:49:03 print(fmt2) # 2018-09-04 print(fmt3) # 18-09-04 print(fmt4) # Tue Sep 4 16:49:03 2018
3、幾種時間格式間的轉換
1. 轉換
Timestamp ---> struct_time: time.localtime(轉成我國的時間)、time.gmtime(轉成倫敦時間)
struct_time ---> Timestamp: time.mktime()
Format_string ---> struct_time: time.strptime()
struct_time ---> Format_string: time.strftime()
2. 例子
1. 把格式化時間2018年8月8日轉成時間戳時間 str_time = '2018-8-8' struct_time = time.strptime(str_time,'%Y-%m-%d') print(struct_time) # time.struct_time(tm_year=2018, tm_mon=8, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=220, tm_isdst=-1) timestamp = time.mktime(struct_time) print(timestamp) # 1533657600.0 2. 把時間戳時間轉成格式化時間 timestamp = 1500000000 struct_time = time.localtime(timestamp) str_time = time.strftime('%Y-%m-%d',struct_time) print(str_time) # 2017-07-14 3. 寫函式,計算本月1號的時間戳時間 通過我拿到的這個時間,能迅速的知道我現在所在時間的年 月 def get_timestamp(): str_time = time.strftime('%Y-%m-1') struct_time = time.strptime(str_time,'%Y-%m-%d') timestamp = time.mktime(struct_time) return timestamp ret = get_timestamp() print(ret)
%y 兩位數的年份表示(00-99) %Y 四位數的年份表示(0000-9999) %m 月份(01-12) %d 月內中的一天(0-31) %H 24小時制小時數(0-23) %I 12小時制小時數(01-12) %M 分鐘數(00-59) %S 秒(00-59) %a 本地簡化星期名稱 %A 本地完整星期名稱 %b 本地簡化的月份名稱 %B 本地完整的月份名稱 %c 本地相應的日期表示和時間表示 %j 年內的一天(001-366) %p 本地A.M.或P.M.的等價符 %U 一年中的星期數(00-53)星期天為星期的開始 %w 星期(0-6),星期天為星期的開始 %W 一年中的星期數(00-53)星期一為星期的開始 %x 本地相應的日期表示 %X 本地相應的時間表示 %Z 當前時區的名稱 %% %號本身3. python中時間日期格式化符號
二、datetime模組
1、dateime.date
import datetime 1. datetime.date型別(年月日) 注意:datetime.date型別就是time模組的結構化時間,只是它在內部把結構化時間的顯示格式化了再打印出來 datetime.date.today() datetime.date(2018, 12, 21) 2.根據給定的時間戮,返回一個date物件 datetime.date.fromtimestamp(timestamp) # 返回一個date物件,與datetime.date.today()作用相同 datetime.date.fromtimestamp(1528345678) # 2018-06-07 3.由date日期格式轉化為字串格式 datetime.date.strftime(format) datetime.date.today().strftime('%Y-%m-%d') # "2018-12-21" 注意:date型別沒有strptime
2、datetime.dateime
注意:datetime是繼承了date的類 1. datetime.datetime型別(年月日時分秒微妙時區) datetime.datetime.today() datetime.datetime.now() datetime.datetime(2018,12, 21, 8, 12, 8, 603000) 返回當前日期時間的日期部分 datetime.datetime.today().date() # 2018-12-21 返回當前日期時間的時間部分 datetime.datetime.now().time() # 15:19:16.230449 2.根據給定的時間戮,返回一個datetime物件 datetime.datetime.fromtimestamp() # 返回一個datetime物件,與datetime.datetime.today()作用相同 datetime.datetime.fromtimestamp(1528345678) # 2018-06-07 12:27:58 3. 由日期格式轉化為字串格式 datetime.datetime.strftime(format) datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # "2018-12-21 09:17:14" 3.由字串格式轉化為日期格式 datetime.datetime.strptime() datetime.datetime.strptime('2018-12-21 11:01:27', '%Y-%m-%d %H:%M:%S') 4. 結構化時間:元組 注意:這就是結構化時間初始的樣子 datetime.datetime.now().timetuple() # time.struct_time(tm_year=2018, tm_mon=12, tm_mday=21, tm_hour=9, tm_min=18, tm_sec=1, tm_wday=4, tm_yday=355, tm_isdst=-1)
3、datetime.timedelta
datetime.timedelta用於計算兩個日期之間的差值 datetime.timedelta(weeks=1) # 返回一個時間差,引數weeks,days,hours,minutes,[1 weeks=7 days],沒有years,months 例1: import datetime day7 = datetime.timedelta(days=7) # 7天的時間時間隔 一年用52周表示 weeks=52 today = datetime.datetime.now() # 7天之後的時間是什麼 # today + 7 after_7 = today + day7 print(after_7, type(after_7)) 例2: a=datetime.datetime.now() # datetime.datetime(2018, 12, 21, 13, 15, 20, 871000) b=datetime.datetime.now() # datetime.datetime(2018, 12, 21, 13, 15, 29, 603000) print(b-a) # datetime.timedelta(0, 0, 8, 732000) print((b-a).seconds) # 8 print((b-a).total_seconds()) # 8.732 或者 time1 = datetime.datetime(2018, 12, 20) time2 = datetime.datetime(2017, 11, 12) """計算天數差值""" print((time1-time2).days) """計算兩個日期之間相隔的秒數""" print ((time1-time2).total_seconds())
4、datetime.time
time類有5個引數,datetime.time(hour,minute,second,microsecond,tzoninfo),返回08:29:30 1.datetime.time.replace() 2.datetime.time.strftime(format):按照format格式返回時間 3.datetime.time.tzname():返回時區名字 4.datetime.time.utcoffset():返回時區的時間偏移量
三、時間工具dateutil
直接看例子感受時間工具的絕對時間relativedelta吧
from dateutil import relativedelta import datetime now = datetime.datetime.today() print(now) # 2018-12-21 15:47:31.005604 # 下個月 next_month = now + relativedelta.relativedelta(months=1) print(next_month) # 2019-01-21 15:47:31.005604 # 注意months和month的區別: # months=1 表示在現在的日期基礎上加一個月的時間 # months=-1表示在現在的日期基礎上減一個月 # month=1 表示把現在的日期的月份設定為1月 # years, months, days, weeks, hours, minutes, seconds等也是跟對應的year,month,day,week...一樣 set_month = now + relativedelta.relativedelta(month=1) print(set_month) # 2018-01-21 15:47:31.005604 # 注意與datetime.timedelta區別: # datetime.timedelta沒有months和years引數 # 因此一個月用weeks=4表示,只能表示28天后,有偏差 next_month2 = now + datetime.timedelta(weeks=4) print(next_month2) # 2019-01-18 15:47:31.005604 # 下個月加一週 next_month_week = now + relativedelta.relativedelta(months=1, weeks=1) print(next_month_week) # 2019-01-28 15:47:31.005604 # 下個月加一週,上午10點 next_month_week_ten = now + relativedelta.relativedelta(months=1, weeks=1, hour=10) print(next_month_week_ten) # 2019-01-28 10:47:31.005604 # 一年後的前一個月 next_year_premonth = now + relativedelta.relativedelta(years=1, months=-1) print(next_year_premonth) # 2019-11-21 15:47:31.005604