在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 標(biāo)準(zhǔn)庫 (5)
標(biāo)準(zhǔn)庫 (4)
如何成為 Python 高手
標(biāo)準(zhǔn)庫 (6)
標(biāo)準(zhǔn)庫 (3)
類(2)
Pandas 使用 (2)
xml
用 tornado 做網(wǎng)站 (5)
文件(1)
練習(xí)
列表(3)
從小工到專家
除法
錯誤和異常 (2)
函數(shù)(1)
用 tornado 做網(wǎng)站 (7)
為做網(wǎng)站而準(zhǔn)備
函數(shù)練習(xí)
標(biāo)準(zhǔn)庫 (8)
Pandas 使用 (1)
回顧 list 和 str
字典(1)
用 tornado 做網(wǎng)站 (3)
字符串(1)
函數(shù)(2)
寫一個簡單的程序
將數(shù)據(jù)存入文件
語句(5)
SQLite 數(shù)據(jù)庫
集成開發(fā)環(huán)境(IDE)
集合(1)
類(1)
用 tornado 做網(wǎng)站 (6)
用 tornado 做網(wǎng)站 (2)
自省
語句(4)
錯誤和異常 (1)
用 tornado 做網(wǎng)站 (4)
集合(2)
列表(1)
標(biāo)準(zhǔn)庫 (1)
生成器
mysql 數(shù)據(jù)庫 (1)
第三方庫
實戰(zhàn)
運算符
類(3)
字典(2)
語句(1)
數(shù)和四則運算
語句(2)
文件(2)
MySQL 數(shù)據(jù)庫 (2)
電子表格
迭代器
mongodb 數(shù)據(jù)庫 (1)
特殊方法 (2)
特殊方法 (1)
字符編碼
編寫模塊
用 tornado 做網(wǎng)站 (1)
標(biāo)準(zhǔn)庫 (5)
函數(shù)(4)
類(5)
字符串(2)
關(guān)于 Python 的故事
函數(shù)(3)
字符串(4)
處理股票數(shù)據(jù)
常用數(shù)學(xué)函數(shù)和運算優(yōu)先級
字符串(3)
為計算做準(zhǔn)備
多態(tài)和封裝
類(4)
迭代
語句(3)
錯誤和異常 (3)
分析 Hello
Python 安裝
標(biāo)準(zhǔn)庫 (2)
列表(2)
元組

標(biāo)準(zhǔn)庫 (5)

“一寸光陰一寸金,寸金難買寸光陰”,時間是寶貴的。

在日常生活中,“時間”這個屬于是比較籠統(tǒng)和含糊的。在物理學(xué)中,“時間”是一個非常明確的概念。在 Python 中,“時間”可以通過相關(guān)模塊實現(xiàn)。

calendar

>>> import calendar
>>> cal = calendar.month(2015, 1)
>>> print cal
    January 2015
Mo Tu We Th Fr Sa Su
          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 31

輕而易舉得到了 2015 年 1 月的日歷,并且排列的還那么整齊。這就是 calendar 模塊。讀者可以用 dir() 去查看這個模塊下的所有內(nèi)容。為了讓讀者閱讀方便,將常用的整理如下:

calendar(year,w=2,l=1,c=6)

返回 year 年年歷,3 個月一行,間隔距離為 c。 每日寬度間隔為 w 字符。每行長度為 21 W+18+2 C。l 是每星期行數(shù)。

>>> year = calendar.calendar(2015)
>>> print year
                                  2015

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                         1                         1
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       2  3  4  5  6  7  8
12 13 14 15 16 17 18       9 10 11 12 13 14 15       9 10 11 12 13 14 15
19 20 21 22 23 24 25      16 17 18 19 20 21 22      16 17 18 19 20 21 22
26 27 28 29 30 31         23 24 25 26 27 28         23 24 25 26 27 28 29
                                                    30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                   1  2  3       1  2  3  4  5  6  7
 6  7  8  9 10 11 12       4  5  6  7  8  9 10       8  9 10 11 12 13 14
13 14 15 16 17 18 19      11 12 13 14 15 16 17      15 16 17 18 19 20 21
20 21 22 23 24 25 26      18 19 20 21 22 23 24      22 23 24 25 26 27 28
27 28 29 30               25 26 27 28 29 30 31      29 30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                      1  2          1  2  3  4  5  6
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       7  8  9 10 11 12 13
13 14 15 16 17 18 19      10 11 12 13 14 15 16      14 15 16 17 18 19 20
20 21 22 23 24 25 26      17 18 19 20 21 22 23      21 22 23 24 25 26 27
27 28 29 30 31            24 25 26 27 28 29 30      28 29 30
                          31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                         1          1  2  3  4  5  6
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       7  8  9 10 11 12 13
12 13 14 15 16 17 18       9 10 11 12 13 14 15      14 15 16 17 18 19 20
19 20 21 22 23 24 25      16 17 18 19 20 21 22      21 22 23 24 25 26 27
26 27 28 29 30 31         23 24 25 26 27 28 29      28 29 30 31
                          30

isleap(year)

判斷是否為閏年,是則返回 true,否則 false.

>>> calendar.isleap(2000)
True
>>> calendar.isleap(2015)
False

怎么判斷一年是閏年,常常見諸于一些編程語言的練習(xí)題,現(xiàn)在用一個方法搞定。

leapdays(y1,y2)

返回在 Y1,Y2 兩年之間的閏年總數(shù),包括 y1,但不包括 y2,這有點如同序列的切片一樣。

>>> calendar.leapdays(2000,2004)
1
>>> calendar.leapdays(2000,2003)
1

month(year,month,w=2,l=1)

返回 year 年 month 月日歷,兩行標(biāo)題,一周一行。每日寬度間隔為 w 字符。每行的長度為 7* w+6。l 是每星期的行數(shù)。

>>> print calendar.month(2015, 5)
      May 2015
Mo Tu We Th Fr Sa Su
             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 31

monthcalendar(year,month)

返回一個列表,列表內(nèi)的元素還是列表,這叫做嵌套列表。每個子列表代表一個星期,都是從星期一到星期日,如果沒有本月的日期,則為 0。

>>> calendar.monthcalendar(2015, 5)
[[0, 0, 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, 31]]

讀者可以將這個結(jié)果和 calendar.month(2015, 5) 去對照理解。

monthrange(year,month)

返回一個元組,里面有兩個整數(shù)。第一個整數(shù)代表著該月的第一天從星期幾是(從 0 開始,依次為星期一、星期二,直到 6 代表星期日)。第二個整數(shù)是該月一共多少天。

>>> calendar.monthrange(2015, 5)
(4, 31)

從返回值可知,2015 年 5 月 1 日是星期五,這個月一共 31 天。這個結(jié)果,也可以從日歷中看到。

weekday(year,month,day)

輸入年月日,知道該日是星期幾(注意,返回值依然按照從 0 到 6 依次對應(yīng)星期一到星期六)。

>>> calendar.weekday(2015, 5, 4)    #星期一
0
>>> calendar.weekday(2015, 6, 4)    #星期四
3

time

time()

time 模塊是常用的。

>>> import time
>>> time.time()
1430745298.391026

time.time() 獲得的是當(dāng)前時間(嚴(yán)格說是時間戳),只不過這個時間對人不友好,它是以 1970 年 1 月 1 日 0 時 0 分 0 秒為計時起點,到當(dāng)前的時間長度(不考慮閏秒)

UNIX 時間,或稱 POSIX 時間是 UNIX 或類 UNIX 系統(tǒng)使用的時間表示方式:從協(xié)調(diào)世界時 1970 年 1 月 1 日 0 時 0 分 0 秒起至現(xiàn)在的總秒數(shù),不考慮秒

現(xiàn)時大部分使用 UNIX 的系統(tǒng)都是 32 位元的,即它們會以 32 位二進(jìn)制數(shù)字表示時間。但是它們最多只能表示至協(xié)調(diào)世界時間 2038 年 1 月 19 日 3 時 14 分 07 秒(二進(jìn)制:01111111 11111111 11111111 11111111,0x7FFF:FFFF),在下一秒二進(jìn)制數(shù)字會是 10000000 00000000 00000000 00000000,(0x8000:0000),這是負(fù)數(shù),因此各系統(tǒng)會把時間誤解作 1901 年 12 月 13 日 20 時 45 分 52 秒(亦有說回鬼到 1970 年)。這時可能會令軟件發(fā)生問題,導(dǎo)致系統(tǒng)癱瘓。

目前的解決方案是把系統(tǒng)由 32 位元轉(zhuǎn)為 64 位元系統(tǒng)。在 64 位系統(tǒng)下,此時間最多可以表示到 292,277,026,596 年 12 月 4 日 15 時 30 分 08 秒。

有沒有對人友好一點的時間顯示呢?

localtime()

>>> time.localtime()
time.struct_time(tm_year=2015, tm_mon=5, tm_mday=4, tm_hour=21, tm_min=33, tm_sec=39, tm_wday=0, tm_yday=124, tm_isdst=0)

這個就友好多了。得到的結(jié)果可以稱之為時間元組(也有括號),其各項的含義是:

索引 屬性 含義
0 tm_year
1 tm_mon
2 tm_mday
3 tm_hour
4 tm_min
5 tm_sec
6 tm_wday 一周中的第幾天
7 tm_yday 一年中的第幾天
8 tm_isdst 夏令時
>>> t = time.localtime()
>>> t[1]
5

通過索引,能夠得到相應(yīng)的屬性,上面的例子中就得到了當(dāng)前時間的月份。

其實,time.localtime() 不是沒有參數(shù),它在默認(rèn)情況下,以 time.time() 的時間戳為參數(shù)。言外之意就是說可以自己輸入一個時間戳,返回那個時間戳所對應(yīng)的時間(按照公元和時分秒計時)。例如:

>>> time.localtime(100000)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=2, tm_hour=11, tm_min=46, tm_sec=40, tm_wday=4, tm_yday=2, tm_isdst=0)

gmtime()

localtime() 得到的是本地時間,如果要國際化,就最好使用格林威治時間??梢赃@樣:

>>> import time
>>> time.gmtime()
time.struct_time(tm_year=2015, tm_mon=5, tm_mday=4, tm_hour=23, tm_min=46, tm_sec=34, tm_wday=0, tm_yday=124, tm_isdst=0)

格林威治標(biāo)準(zhǔn)時間(中國大陸翻譯:格林尼治平均時間或格林尼治標(biāo)準(zhǔn)時間,臺、港、澳翻譯:格林威治標(biāo)準(zhǔn)時間;英語:Greenwich Mean Time,GMT)是指位于英國倫敦郊區(qū)的皇家格林威治天文臺的標(biāo)準(zhǔn)時間,因為本初子午線被定義在通過那裡的經(jīng)線。

還有更友好的:

asctime()

>>> time.asctime()
'Mon May  4 21:46:13 2015'

time.asctime() 的參數(shù)為空時,默認(rèn)是以 time.localtime() 的值為參數(shù),所以得到的是當(dāng)前日期時間和星期。當(dāng)然,也可以自己設(shè)置參數(shù):

>>> h = time.localtime(1000000)
>>> h
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=12, tm_hour=21, tm_min=46, tm_sec=40, tm_wday=0, tm_yday=12, tm_isdst=0)
>>> time.asctime(h)
'Mon Jan 12 21:46:40 1970'

注意,time.asctime() 的參數(shù)必須是時間元組,類似上面那種。不是時間戳,通過 time.time() 得到的時間戳,也可以轉(zhuǎn)化為上面形式:

ctime()

>>> time.ctime()
'Mon May  4 21:52:22 2015'

在沒有參數(shù)的時候,事實上是以 time.time() 的時間戳為參數(shù)。也可以自定義一個時間戳。

>>> time.ctime(1000000)
'Mon Jan 12 21:46:40 1970'

跟前面得到的結(jié)果是一樣的。只不過是用了時間戳作為參數(shù)。

在前述函數(shù)中,通過 localtime()、gmtime() 得到的是時間元組,通過 time() 得到的是時間戳。有的函數(shù)如 asctime() 是以時間元組為參數(shù),有的如 ctime() 是以時間戳為函數(shù)。這樣做的目的是為了滿足編程中多樣化的需要。

mktime()

mktime() 也是以時間元組為參數(shù),但是它返回的不是可讀性更好的那種樣式,而是:

>>> lt = time.localtime()
>>> lt
time.struct_time(tm_year=2015, tm_mon=5, tm_mday=5, tm_hour=7, tm_min=55, tm_sec=29, tm_wday=1, tm_yday=125, tm_isdst=0)
>>> time.mktime(lt)
1430783729.0

返回了時間戳。就類似于 localtime() 的逆過程(localtime() 是以時間戳為參數(shù))。

以上基本能夠滿足編程需要了嗎?好像還缺點什么,因為在編程中,用的比較多的是“字符串”,似乎還沒有將時間轉(zhuǎn)化為字符串的函數(shù)。這個應(yīng)該有。

strftime()

函數(shù)格式稍微復(fù)雜一些。

Help on built-in function strftime in module time:

strftime(...) strftime(format[, tuple]) -> string

Convert a time tuple to a string according to a format specification. See the library reference manual for formatting codes. When the time tuple is not present, current time as returned by localtime() is used.

將時間元組按照指定格式要求轉(zhuǎn)化為字符串。如果不指定時間元組,就默認(rèn)為 localtime() 值。我說復(fù)雜,是在于其 format,需要用到下面的東西。

格式 含義 取值范圍(格式)
%y 去掉世紀(jì)的年份 00-99,如"15"
%Y 完整的年份 如"2015"
%j 指定日期是一年中的第幾天 001-366
%m 返回月份 01-12
%b 本地簡化月份的名稱 簡寫英文月份
%B 本地完整月份的名稱 完整英文月份
%d 該月的第幾日 如 5 月 1 日返回"01"
%H 該日的第幾時(24 小時制) 00-23
%l 該日的第幾時(12 小時制) 01-12
%M 分鐘 00-59
%S 00-59
%U 在該年中的第多少星期(以周日為一周起點) 00-53
%W 同上,只不過是以周一為起點 00-53
%w 一星期中的第幾天 0-6
%Z 時區(qū) 在中國大陸測試,返回 CST,即 China Standard Time
%x 日期 日/月/年
%X 時間 時:分:秒
%c 詳細(xì)日期時間 日/月/年 時:分:秒
%% ‘%’字符 ‘%’字符
%p 上下午 AM or PM

簡要列舉如下:

>>> time.strftime("%y,%m,%d")
'15,05,05'
>>> time.strftime("%y/%m/%d")
'15/05/05'

分隔符可以自由指定。既然已經(jīng)變成字符串了,就可以“隨心所欲不逾矩”了。

strptime()

Help on built-in function strptime in module time:

strptime(...) strptime(string, format) -> struct_time

Parse a string to a time tuple according to a format specification. See the library reference manual for formatting codes (same as strftime()).

strptime() 的作用是將字符串轉(zhuǎn)化為時間元組。請注意的是,其參數(shù)要指定兩個,一個是時間字符串,另外一個是時間字符串所對應(yīng)的格式,格式符號用上表中的。例如:

>>> today = time.strftime("%y/%m/%d")
>>> today
'15/05/05'
>>> time.strptime(today, "%y/%m/%d")
time.struct_time(tm_year=2015, tm_mon=5, tm_mday=5, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=125, tm_isdst=-1)

datetime

雖然 time 模塊已經(jīng)能夠把有關(guān)時間方面的東西搞定了,但是,在某些調(diào)用的時候,還感覺不是很直接,于是又出來了一個 datetime 模塊,供程序猿和程序媛們選擇使用。

datetime 模塊中有幾個類:

  • datetime.date:日期類,常用的屬性有 year/month/day
  • datetime.time:時間類,常用的有 hour/minute/second/microsecond
  • datetime.datetime:日期時間類
  • datetime.timedelta:時間間隔,即兩個時間點之間的時間長度
  • datetime.tzinfo:時區(qū)類

date 類

通過實例了解常用的屬性:

>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2015, 5, 5)

這里其實生成了一個日期對象,然后操作這個對象的各種屬性。用 print 語句,可以是視覺更佳:

>>> print today
2015-05-05
>>> print today.ctime()
Tue May  5 00:00:00 2015
>>> print today.timetuple()
time.struct_time(tm_year=2015, tm_mon=5, tm_mday=5, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=125, tm_isdst=-1)
>>> print today.toordinal()
735723

特別注意,如果你妄圖用 datetime.date.year(),是會報錯的,因為 year 不是一個方法,必須這樣行:

>>> print today.year
2015
>>> print today.month
5
>>> print today.day
5

進(jìn)一步看看時間戳與格式化時間格式的轉(zhuǎn)換

>>> to = today.toordinal()
>>> to
735723
>>> print datetime.date.fromordinal(to)
2015-05-05

>>> import time
>>> t = time.time()
>>> t
1430787994.80093
>>> print datetime.date.fromtimestamp(t)
2015-05-05

還可以更靈活一些,修改日期。

>>> d1 = datetime.date(2015,5,1)
>>> print d1
2015-05-01
>>> d2 = d1.replace(year=2005, day=5)
>>> print d2
2005-05-05

time 類

也要生成 time 對象

>>> t = datetime.time(1,2,3)
>>> print t
01:02:03

它的常用屬性:

>>> print t.hour
1
>>> print t.minute
2
>>> print t.second
3
>>> t.microsecond
0
>>> print t.tzinfo
None

timedelta 類

主要用來做時間的運算。比如:

>>> now = datetime.datetime.now()
>>> print now
2015-05-05 09:22:43.142520

沒有講述 datetime 類,因為在有了 date 和 time 類知識之后,這個類比較簡單,我最喜歡這個 now 方法了。

對 now 增加 5 個小時

>>> b = now + datetime.timedelta(hours=5)
>>> print b
2015-05-05 14:22:43.142520

增加兩周

>>> c = now + datetime.timedelta(weeks=2)
>>> print c
2015-05-19 09:22:43.142520

計算時間差:

>>> d = c - b
>>> print d
13 days, 19:00:00

總目錄   |   上節(jié):標(biāo)準(zhǔn)庫(4)   |   下節(jié):標(biāo)準(zhǔn)庫(6)

如果你認(rèn)為有必要打賞我,請通過支付寶:qiwsir@126.com,不勝感激。

上一篇:語句(1)下一篇:元組