<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
In [1]: import time # 獲取當前時間 In [25]: time.strftime("%Y-%m-%d_%H-%M-%S", time.localtime()) Out[25]: '2018-06-17_20-05-36' # 停頓0.5秒 In [26]: time.sleep(0.5)
功能:時間存取和轉換。
相關模組:
datetime 標準模組。
calendar 標準模組。
下面介紹一些術語和約定:
epoch是時間開始點。對於Unix ,時代是1970年1月1日0點。通過time.gmtime(0)可以檢視時間的起點:
In [1]: import time In [2]: time.gmtime(0) Out[2]: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0) In [3]: time.gmtime(time.time() + 786041553) # 32位元會報錯 Out[3]: time.struct_time(tm_year=2043, tm_mon=5, tm_mday=8, tm_hour=6, tm_min=26, tm_sec=50, tm_wday=4, tm_yday=128, tm_isdst=0)
對於32位元的linux系統,時間只能處理到2038年。現在新發布的主流已經全部是64位元版本。
UTC是協調世界時(前身為格林威治標準時間或GMT)。
DST為夏令時,通常是根據當地法律在一年內的部分時間進行一小時的調整。 C庫包含有當地規則的表。
實時函數的精度可能比建議的要低。例如在大多數Unix系統中,時鐘“滴答”只有50或100次每秒。
不過time()和sleep()比Unix的更好:時間為浮點數,time()的返回確保最精確(儘量使用Unix的函數gettimeofday()) ,sleep()接受的時間為非零分數(儘量用select()實現) 。
gmtime(), localtime()和strptime()的返回是包含9個整數的序列,可以作為asctime(), mktime() and strftime()的輸入,每個域都有自己的屬性,實際上是一個結構體struct_time,參見上面的例子。
時間轉換:gmtime()把浮點時間轉為UTC的struct_time,反之calendar.timegm();localtime()把浮點時間轉為local的struct_time,反之mktime()。實際上calendar.timegm()和mktime()是等效的,不過前者返回整數,後者返回浮點數。
生成epoch的浮點數,注意不同的系統精度不同,linux一般是小數點後面7為,windows一般是小數點後3位。Time函數是沒有引數的。可以直接對返回的浮點數進行計算。
gmtime([secs])把浮點時間轉為UTC的struct_time,如果無輸入引數為空會呼叫time()讀取當前時間。
gmtime顯示的是世界協調時間, localtime([secs])可以顯示本地時間。
注意夏時制要設定dst。asctime([t])顯示時間為可讀性好的格式,它把gmtime(), localtime()和strptime()的返回的struct_time型別轉換為可讀性較好的格式。如果輸入引數為空則呼叫localtime()的返回結果。它和c函數不同的地方是末尾不會新增換行。asctime不會使用Locale資訊。
ctime([secs])在asctime上更進一步,轉換浮點數為可讀性較好的格式,相當於asctime(localtime(secs)), 這個功能很常用。ctime不會使用Locale資訊。
In [1]: import time In [2]: time.gmtime(0) Out[2]: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0) In [3]: time.gmtime(time.time() + 786041553) Out[3]: time.struct_time(tm_year=2043, tm_mon=5, tm_mday=8, tm_hour=6, tm_min=26, tm_sec=50, tm_wday=4, tm_yday=128, tm_isdst=0) In [4]: time.time() Out[4]: 1528637996.277831 In [5]: time.gmtime() Out[5]: time.struct_time(tm_year=2018, tm_mon=6, tm_mday=10, tm_hour=13, tm_min=42, tm_sec=47, tm_wday=6, tm_yday=161, tm_isdst=0) In [6]: time.localtime() Out[6]: time.struct_time(tm_year=2018, tm_mon=6, tm_mday=10, tm_hour=21, tm_min=43, tm_sec=54, tm_wday=6, tm_yday=161, tm_isdst=0) In [7]: time.asctime() Out[7]: 'Sun Jun 10 22:10:14 2018' In [8]: time.ctime() Out[8]: 'Sun Jun 10 22:12:25 2018'
sleep(secs)暫停執行指定秒數。引數可以是整數或浮點數。實際的中止時間可能小於請求時間,因為例行的訊號捕捉可能終止sleep。此外中止時間可能長於請求時間,因為因為系統排程也是需要時間的。
In [36]: time.sleep(3)
clock()在Unix上,返回當前的處理器時間,為以秒錶示的浮點數。精度決於同名的C函數,通常用於基準Python或定時的演演算法。我們書寫一個不耗cpu和耗cpu的指令碼對比:
import time template = '{} - {:0.2f} - {:0.2f}' print(template.format( time.ctime(), time.time(), time.clock()) ) for i in range(3, 0, -1): print('Sleeping', i) time.sleep(i) print(template.format( time.ctime(), time.time(), time.clock()) )
執行結果:
$ python3 time_clock_sleep.py
Mon Jun 18 01:27:52 2018 - 1529256472.83 - 0.05
Sleeping 3
Mon Jun 18 01:27:55 2018 - 1529256475.83 - 0.05
Sleeping 2
Mon Jun 18 01:27:57 2018 - 1529256477.83 - 0.05
Sleeping 1
Mon Jun 18 01:27:58 2018 - 1529256478.83 - 0.05
import hashlib import time # Data to use to calculate md5 checksums data = open(__file__, 'rb').read() for i in range(5): h = hashlib.sha1() print(time.ctime(), ': {:0.3f} {:0.3f}'.format( time.time(), time.clock())) for i in range(300000): h.update(data) cksum = h.digest()
執行結果:
$ python3 time_clock.py
Mon Jun 18 01:31:35 2018 : 1529256695.695 0.048
Mon Jun 18 01:31:36 2018 : 1529256696.166 0.519
Mon Jun 18 01:31:36 2018 : 1529256696.635 0.987
Mon Jun 18 01:31:37 2018 : 1529256697.110 1.461
Mon Jun 18 01:31:37 2018 : 1529256697.587 1.936
struct_time是的命名元組,結構如下:
| 索引(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(是否是夏令時) | 預設為-1 |
import timedef show_struct(s): print ' tm_year :', s.tm_year print ' tm_mon :', s.tm_mon print ' tm_mday :', s.tm_mday print ' tm_hour :', s.tm_hour print ' tm_min :', s.tm_min print ' tm_sec :', s.tm_sec print ' tm_wday :', s.tm_wday print ' tm_yday :', s.tm_yday print ' tm_isdst:', s.tm_isdstprint 'gmtime:'show_struct(time.gmtime())print 'nlocaltime:'show_struct(time.localtime())print 'nmktime:', time.mktime(time.localtime())
執行結果:
$ python3 time_struct.py
gmtime:
tm_year : 2018
tm_mon : 6
tm_mday : 17
tm_hour : 17
tm_min : 32
tm_sec : 54
tm_wday : 6
tm_yday : 168
tm_isdst: 0localtime:
tm_year : 2018
tm_mon : 6
tm_mday : 18
tm_hour : 1
tm_min : 32
tm_sec : 54
tm_wday : 0
tm_yday : 169
tm_isdst: 0mktime: 1529256774.0
重置庫函數的時間轉換規則。實際上是修改環境變數TZ,python 2.3以後類linux支援該功能,這個功能相對不是那麼常用。TZ環境變數的格式如下:
std offset [dst [offset [,start[/time], end[/time]]]]
STD和DST為時區縮寫。hh[:mm[:ss]],表示加上這個時間可以得到UTC時間。偏移量的形式為: HH [ : MM [ : SS] ],夏時制增加1小時。
starttime, endtime表示使用夏時制的區間。time和偏移類似,預設時間是02:00:00。比如:
In [1]: import os In [2]: import time In [3]: os.environ['TZ'] = 'EST+05EDT,M4.1.0,M10.5.0' In [4]: time.tzset() In [5]: time.strftime('%X %x %Z') Out[5]: '13:38:26 06/17/18 EDT' In [6]: os.environ['TZ'] = 'AEST-10AEDT-11,M10.5.0,M3.5.0' In [7]: time.tzset() In [8]: time.strftime('%X %x %Z') Out[8]: '03:38:46 06/18/18 AEST'
在許多Unix系統(包括* BSD,Linux和Solaris,和Darwin),使用系統時區資料庫更方便。
In [9]: os.environ['TZ'] = 'US/Eastern' In [10]: time.tzset() In [11]: time.tzname Out[11]: ('EST', 'EDT') In [12]: os.environ['TZ'] = 'Egypt' In [13]: time.tzset() In [14]: ('EET', 'EEST') Out[14]: ('EET', 'EEST')
另一範例:
import time import os def show_zone_info(): print ' TZ :', os.environ.get('TZ', '(not set)') print ' tzname:', time.tzname print ' Zone : %d (%d)' % (time.timezone, (time.timezone / 3600)) print ' DST :', time.daylight print ' Time :', time.ctime() printprint 'Default :'show_zone_info()ZONES = [ 'GMT', 'Europe/Amsterdam', ]for zone in ZONES: os.environ['TZ'] = zone time.tzset() print zone, ':' show_zone_info()
執行結果:
$ python3 time_timezone.py Default : TZ : (not set) tzname: ('CST', 'CST') Zone : -28800 (-8.0) DST : 0 Time : Mon Jun 18 01:40:39 2018 GMT : TZ : GMT tzname: ('GMT', 'GMT') Zone : 0 (0.0) DST : 0 Time : Sun Jun 17 17:40:39 2018 Europe/Amsterdam : TZ : Europe/Amsterdam tzname: ('CET', 'CEST') Zone : -3600 (-1.0) DST : 1 Time : Sun Jun 17 19:40:39 2018
time.strftime(format[, t]):把一個代表時間的元組或者struct_tim轉為格式化的時間字串。如果t未指定,將呼叫time.localtime()的返回作為輸入。如果輸入中任何一個元素越界將報ValueError異常。格式化引數如下:
格式 | 含義 | 備註 |
---|---|---|
%a | 本地簡化星期名 | |
%A | 本地完整星期名 | |
%b | 本地簡化月份名 | |
%B | 本地完整月份名稱 | |
%c | 本地相應的日期和時間表示 | |
%d | 日期(01 - 31) | |
%H | 小時(24小時制,00 - 23) | |
%I | 小時(12小時制,01 - 12) | |
%j | 天數(基於年)(001 - 366) | |
%m | 月份(01 - 12) | |
%M | 分鐘(00 - 59) | |
%p | 顯示am或pm的標識 | |
%S | 秒(01 - 61) | |
%U | 週數(基於年)(00 – 53週日是星期的開始。)第一個週日之前的所有天數都放在第0周。 | |
%w | 星期中的天數(0 - 6,0是星期天) | |
%W | 和%U基本相同,以星期一為星期的開始。 | |
%x | 本地相應日期表示 | |
%X | 本地相應時間表示 | |
%y | 去掉世紀的年份(00 - 99) | |
%Y | 完整的年份 | |
%Z | 時區的名字(如果不存在為空字元) | |
%% | '%’字元 |
備註:
“%p”只有與“%I”配合使用才有效果。
秒是0 - 61,而不是59,以處理閏秒和雙閏秒。
當使用strptime()函數時,只有當在這年中的週數和天數被確定的時候%U和%W才會被計算。
比如:
In [15]: time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()) Out[15]: 'Sun, 17 Jun 2018 17:44:12 +0000'
下面方式在給檔名等新增時間戳比較有用:
In [17]: time.strftime("%Y-%m-%d_%H:%M:%S", time.gmtime()) Out[17]: '2018-06-17_17:46:18'
顯示格式可能因系統而又不同的差異。
time.strptime(string[, format]):把一個格式化時間字串轉化為struct_time。實際上它和strftime()是逆操作,引數參見strftime。Format預設為"%a %b %d %H:%M:%S %Y",和ctime的返回格式一致,沒有提供的值會採用預設值(1900, 1, 1, 0, 0, 0, 0, 1, -1)。
In [19]: time.strptime("30 Nov 18", "%d %b %y") ...: Out[19]: time.struct_time(tm_year=2018, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=334, tm_isdst=-1)
altzone屬性檢視當前夏時制時間的偏移。daylight屬性檢視是否使用了夏時制。timezone檢視當前時區的偏移。Tzname返回本地時區和夏時制對應的時區。
In [3]: time.altzone Out[3]: -28800 In [4]: time.daylight Out[4]: 0 In [5]: time.timezone Out[5]: -28800 In [6]: time.tzname Out[6]: ('CST', 'CST')
到此這篇關於python工具模組介紹-time 時間存取和轉換的文章就介紹到這了,更多相關python time 時間存取和轉換內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45