徒手憶歲月 2018-09-18 21:28:14 快速入門(私信小編007就能自動領(lǐng)取Python學(xué)習(xí)大禮包?。?/strong> In [1]: import time 簡介 功能:時間訪問和轉(zhuǎn)換,。 相關(guān)模塊: datetime 標(biāo)準(zhǔn)模塊,。 calendar 標(biāo)準(zhǔn)模塊,。 下面介紹一些術(shù)語和約定: epoch 是時間開始點,。對于Unix ,時代是1970年1月1日0點,。通過time.gmtime(0)可以查看時間的起點: In [1]: import time 對于32位的linux系統(tǒng),,時間只能處理到2038年。現(xiàn)在新發(fā)布的主流已經(jīng)全部是64位版本,。 UTC是協(xié)調(diào)世界時(前身為格林威治標(biāo)準(zhǔn)時間或GMT)。 DST為夏令時,,通常是根據(jù)當(dāng)?shù)胤稍谝荒陜?nèi)的部分時間進(jìn)行一小時的調(diào)整,。 C庫包含有當(dāng)?shù)匾?guī)則的表,。 實時函數(shù)的精度可能比建議的要低。例如在大多數(shù)Unix系統(tǒng)中,,時鐘“滴答”只有50或100次每秒,。 不過time()和sleep()比Unix的更好:時間為浮點數(shù),time()的返回確保最精確(盡量使用Unix的函數(shù)gettimeofday()) ,,sleep()接受的時間為非零分?jǐn)?shù)(盡量用select()實現(xiàn)) ,。 gmtime(), localtime()和strptime()的返回是包含9個整數(shù)的序列,可以作為asctime(), mktime() and strftime()的輸入,,每個域都有自己的屬性,,實際上是一個結(jié)構(gòu)體struct_time,參見上面的例子,。 時間轉(zhuǎn)換:gmtime()把浮點時間轉(zhuǎn)為UTC的struct_time,,反之calendar.timegm();localtime()把浮點時間轉(zhuǎn)為local的struct_time,,反之mktime(),。實際上calendar.timegm()和mktime()是等效的,不過前者返回整數(shù),,后者返回浮點數(shù),。 時間生成與轉(zhuǎn)換 生成epoch的浮點數(shù),注意不同的系統(tǒng)精度不同,,linux一般是小數(shù)點后面7為,,windows一般是小數(shù)點后3位。Time函數(shù)是沒有參數(shù)的,??梢灾苯訉Ψ祷氐母↑c數(shù)進(jìn)行計算。 gmtime([secs])把浮點時間轉(zhuǎn)為UTC的struct_time,,如果無輸入?yún)?shù)為空會調(diào)用time()讀取當(dāng)前時間,。 gmtime顯示的是世界協(xié)調(diào)時間, localtime([secs])可以顯示本地時間,。 注意夏時制要設(shè)置dst,。asctime([t])顯示時間為可讀性好的格式,它把gmtime(), localtime()和strptime()的返回的struct_time類型轉(zhuǎn)換為可讀性較好的格式,。如果輸入?yún)?shù)為空則調(diào)用localtime()的返回結(jié)果,。它和c函數(shù)不同的地方是末尾不會添加換行。asctime不會使用Locale信息,。 ctime([secs])在asctime上更進(jìn)一步,,轉(zhuǎn)換浮點數(shù)為可讀性較好的格式,相當(dāng)于asctime(localtime(secs)), 這個功能很常用,。ctime不會使用Locale信息,。 In [1]: import time Sleep sleep(secs)暫停執(zhí)行指定秒數(shù),。參數(shù)可以是整數(shù)或浮點數(shù)。實際的中止時間可能小于請求時間,,因為例行的信號捕捉可能終止sleep,。此外中止時間可能長于請求時間,因為因為系統(tǒng)調(diào)度也是需要時間的,。 In [36]: time.sleep(3) 處理器時間 clock()在Unix上,,返回當(dāng)前的處理器時間,為以秒表示的浮點數(shù),。精度決于同名的C函數(shù),,通常用于基準(zhǔn)Python或定時的算法。我們書寫一個不耗cpu和耗cpu的腳本對比: import time 執(zhí)行結(jié)果: $ python3 time_clock_sleep.py 執(zhí)行結(jié)果: $ python3 time_clock.py struct_time類 struct_time是的命名元組,,結(jié)構(gòu)如下: | 索引(Index) | 屬性(Attribute) | 值(Values) | | 0 | tm_year(年 | 比如2013 | | 1 | tm_mon(月) | 1 - 12 | | 2 | tm_mday(日) | 1 - 31 | | 3 | tm_hour(時) | 0 - 23 | | 4 | tm_min(分) | 0 - 59 | | 5 | tm_sec(秒) | 0 - 61 | | 6 | tm_wday(weekday | 0 - 6(0表示周日 | | 7 | tm_yday(一年中的第幾天) | 1 - 366 | | 8 | tm_isdst(是否是夏令時) | 默認(rèn)為-1 | import timedef show_struct(s): 執(zhí)行結(jié)果: $ python3 time_struct.py 時區(qū) 重置庫函數(shù)的時間轉(zhuǎn)換規(guī)則,。實際上是修改環(huán)境變量TZ,python 2.3以后類linux支持該功能,,這個功能相對不是那么常用,。TZ環(huán)境變量的格式如下: std offset [dst [offset [,start[/time], end[/time]]]] STD和DST為時區(qū)縮寫。hh[:mm[:ss]],,表示加上這個時間可以得到UTC時間,。偏移量的形式為: HH [ : MM [ : SS] ],夏時制增加1小時,。 start time , end time 表示使用夏時制的區(qū)間,。time和偏移類似,默認(rèn)時間是02:00:00,。比如: In [1]: import os 在許多Unix系統(tǒng)(包括* BSD,,Linux和Solaris,和Darwin),,使用系統(tǒng)時區(qū)數(shù)據(jù)庫更方便,。 In [9]: os.environ['TZ'] = 'US/Eastern' 另一實例: import time 執(zhí)行結(jié)果: $ python3 time_timezone.py 格式化 time.strftime(format[, t]):把一個代表時間的元組或者struct_tim轉(zhuǎn)為格式化的時間字符串。如果t未指定,,將調(diào)用time.localtime()的返回作為輸入,。如果輸入中任何一個元素越界將報ValueError異常。格式化參數(shù)如下: | 格式 | 含義 | 備注 | | %a | 本地簡化星期名 | | | %A | 本地完整星期名 | | | %b | 本地簡化月份名 | | | %B | 本地完整月份名稱 | | | %c | 本地相應(yīng)的日期和時間表示 | | | %d | 日期(01 - 31) | | | %H | 小時(24小時制,,00 - 23) | | | %I | 小時(12小時制,,01 - 12) | | | %j | 天數(shù)(基于年)(001 - 366) | | | %m | 月份(01 - 12) | | | %M | 分鐘(00 - 59) | | | %p | 顯示am或pm的標(biāo)識 | | | %S | 秒(01 - 61) | | | %U | 周數(shù)(基于年)(00 – 53周日是星期的開始。)第一個周日之前的所有天數(shù)都放在第0周,。 | | | %w | 星期中的天數(shù)(0 - 6,,0是星期天) | | | %W | 和%U基本相同,以星期一為星期的開始。 | | | %x | 本地相應(yīng)日期表示 | | | %X | 本地相應(yīng)時間表示 | | | %y | 去掉世紀(jì)的年份(00 - 99) | | | %Y | 完整的年份 | | | %Z | 時區(qū)的名字(如果不存在為空字符) | | | %% | '%’字符 | | 備注:
比如: In [15]: time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()) 下面方式在給文件名等添加時間戳比較有用: In [17]: time.strftime("%Y-%m-%d_%H:%M:%S", time.gmtime()) 顯示格式可能因系統(tǒng)而又不同的差異,。 time.strptime(string[, format]):把一個格式化時間字符串轉(zhuǎn)化為struct_time。實際上它和strftime()是逆操作,,參數(shù)參見strftime,。Format默認(rèn)為"%a %b %d %H:%M:%S %Y",和ctime的返回格式一致,,沒有提供的值會采用默認(rèn)值(1900, 1, 1, 0, 0, 0, 0, 1, -1),。 In [19]: time.strptime("30 Nov 18", "%d %b %y") 其他 altzone屬性查看當(dāng)前夏時制時間的偏移。daylight屬性查看是否使用了夏時制,。timezone查看當(dāng)前時區(qū)的偏移,。Tzname返回本地時區(qū)和夏時制對應(yīng)的時區(qū)。 In [3]: time.altzone |
|