摘要:項目地址時間和日期可能涉及到不同的時區(qū)格式,同時又經(jīng)常需要作為時間戳保存,有時候還需要進行一些加減操作,因此處理起來通常會因為方法太多而無從下手。中與時間和日期相關(guān)的標準庫有個和。
項目地址:https://git.io/pytips
時間和日期可能涉及到不同的時區(qū)、格式,同時又經(jīng)常需要作為時間戳保存,有時候還需要進行一些加減操作,因此處理起來通常會因為方法太多而無從下手。Python 中與時間和日期相關(guān)的標準庫有3個:time、datetime 和 calendar。其中 time 模塊更偏向于系統(tǒng)相關(guān)的時間數(shù)據(jù),最常用的可能就是獲取當前時間的秒數(shù) time.time(),此外該模塊中的很多方法都是與 C 語言中的時間方法相同的,如果習慣了使用 C 的人可以很方便地繼續(xù)使用這些方法。calendar 則是在時間與日期之上,它的作用真的就是“日歷”:
from calendar import TextCalendar, HTMLCalendar tc = TextCalendar(firstweekday=6) tc.prmonth(2016, 3)
March 2016 Su Mo Tu We Th Fr Sa 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
datetime 模塊解決了絕大部分時間與日期相關(guān)的操作問題,其中包含了:
timedelta 與時間計算相關(guān)的類;
time 時間相關(guān)的類;
date 日期相關(guān)的類;
datetime 時間和日期;
tzinfo/timezone 與時區(qū)相關(guān)的類(timezone 是 Python 3.2 之后新加入的);
它們的繼承關(guān)系如下:
""" object timedelta tzinfo timezone time date datetime """ pass
import time as _time from datetime import date, time, datetimeDate
date 由年、月、日組成,有下面幾種方式創(chuàng)建一個 date 對象(strptime 是通用方法,將在后面介紹):
d1 = date(2016, 3, 29) d2 = date.today() d3 = date.fromtimestamp(_time.time()) print(d1) print(d2) print(d3)
2016-03-29 2016-03-30 2016-03-30
獲得 date 對象之后,可以分別獲取年、月、日等屬性(strftime也是通用的格式化方法,將在后面介紹):
print("{}/{}/{}".format(d2.day, d2.month, d2.year)) # date.timetuple() 返回 time 模塊中的 struct_time 結(jié)構(gòu),可以直接轉(zhuǎn)換成 Tuple print("time.struct_time: {}".format(tuple(d2.timetuple()))) # 星期數(shù) print("Monday is 0: {} Monday is 1: {}".format(d2.weekday(), d2.isoweekday()))
30/3/2016 time.struct_time: (2016, 3, 30, 0, 0, 0, 2, 90, -1) Monday is 0: 2 Monday is 1: 3Time
datetime.time 由小時、分鐘、秒、微秒(百萬分之一秒)組成,和 date 相似的創(chuàng)建方式,但是由于和 time 模塊有所重疊,因此并不經(jīng)常直接用于創(chuàng)建時間對象,如果需要可以從 datetime.datetime 分割出來:
t1 = time(22, 57, 6, 6) t2 = datetime.now().time() print(t1) print(t2)
22:57:06.000006 23:56:12.495372datetime.datetime
datetime.datetime 繼承自 date,同時將精度精確到時間,創(chuàng)建方式有:
dt1 = datetime(2016, 3, 30, 22, 2) dt2 = datetime.now() dt3 = datetime.fromtimestamp(_time.time()) print(dt1) print(dt2) print(dt3)
2016-03-30 22:02:00 2016-03-30 23:56:13.800861 2016-03-30 23:56:13.800924
從 datetime.datetime 中我們可以獲取 date 和 time,同樣也可以通過 date 和 time 組合得來:
dt = datetime.now() dt = datetime.fromtimestamp(_time.time()) d = dt.date() t = dt.time() print("Date: {} Time: {}".format(d, t)) print("Datetime: {}".format(datetime.combine(date.today(), time(2,3,3))))
Date: 2016-03-30 Time: 23:56:15.078349 Datetime: 2016-03-30 02:03:03時間與日期的運算
如果把 date、time 和 datetime 看作是時間軸上的點,那么 timedelta 就是時間軸上的線段(時間段,時間間隔)。
from datetime import timedelta td = timedelta(weeks=1, days=2, hours=3,minutes=4, seconds=0, microseconds=0, milliseconds=0) print("Time duration: {}".format(td))
Time duration: 9 days, 3:04:00
既然是時間段,那就可以通過兩個時間點相減得到:
current = datetime.now() today = datetime.combine(date.today(), time(0,0,0)) td = current - today print("{:.0f}s of Today".format(td.total_seconds())) today = date.today() lastyear = today.replace(year=today.year-1) print(today - lastyear) t1 = current.time() t2 = time(0, 0, 0) try: print(t1 - t2) except TypeError as err: print(err)
86178s of Today 366 days, 0:00:00 unsupported operand type(s) for -: "datetime.time" and "datetime.time"
時間段還支持一些算術(shù)+、-、*、/、//、%、abs 等,這里就不一一舉例了。
strftime & strptimestrftime(String from Time)和 strptime(String parsed Time)分別是字符串和時間日期之間的轉(zhuǎn)換方法,只不過遵循一定的格式:
print(datetime.strftime.__doc__) print(datetime.strptime.__doc__)
format -> strftime() style string. string, format -> new datetime parsed from a string (like time.strptime()).
fmat = "%y-%m-%d" dt = datetime.now() s = dt.strftime(fmat) print(s) print(datetime.strptime(s, fmat))
16-03-30 2016-03-30 00:00:00
可以通過 strftime() and strptime() Behavior 查看轉(zhuǎn)換格式表,Python 使用的格式與 C standard(1989)是一致的,不過需要注意的是,所有格式都是 zero-padded,也就是自動補零的,如果想要去掉補零,可以用 %-m 等方式,但據(jù)說在 Windows 系統(tǒng)上是不能用的:D
fmat = "%y/%-m/%-d" dt = datetime.now() dt = dt - timedelta(days=22) print(dt.strftime(fmat)) # 當然也可以用 print("{}/{}/{}".format(dt.strftime("%y"), dt.month, dt.day))
16/3/8 16/3/8
歡迎關(guān)注公眾號 PyHub 每日推送
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/37858.html
摘要:項目地址所有用過的人應該都看過下面兩行錯誤信息這就是界的錕斤拷今天和接下來幾期的內(nèi)容將主要關(guān)注中的字符串字節(jié)及兩者之間的相互轉(zhuǎn)換。 項目地址:https://git.io/pytips 所有用過 Python (2&3)的人應該都看過下面兩行錯誤信息: UnicodeEncodeError: ascii codec cant encode characters in position...
摘要:這里的關(guān)鍵詞函數(shù)必須明確指明,不能通過位置推斷則代表任意數(shù)量的關(guān)鍵詞參數(shù)添加的新特性,使得可以在函數(shù)參數(shù)之外使用這里的逗號不能漏掉所謂的解包實際上可以看做是去掉的元組或者是去掉的字典。 項目地址:https://git.io/pytips 函數(shù)調(diào)用的參數(shù)規(guī)則與解包 Python 的函數(shù)在聲明參數(shù)時大概有下面 4 種形式: 不帶默認值的:def func(a): pass 帶有默認值的...
摘要:項目地址中內(nèi)置的庫和分別提供了堆和優(yōu)先隊列結(jié)構(gòu),其中優(yōu)先隊列本身也是基于實現(xiàn)的,因此我們這次重點看一下。堆可以用于實現(xiàn)調(diào)度器例見之協(xié)程,更常用的是優(yōu)先隊列例如。 項目地址:https://git.io/pytips Python 中內(nèi)置的 heapq 庫和 queue 分別提供了堆和優(yōu)先隊列結(jié)構(gòu),其中優(yōu)先隊列 queue.PriorityQueue 本身也是基于 heapq 實現(xiàn)的,因...
摘要:只包含了個基本拉丁字母阿拉伯數(shù)目字和英式標點符號一共個字符,因此只需要不占滿一個字節(jié)就可以存儲,而則涵蓋的數(shù)據(jù)除了視覺上的字形編碼方法標準的字符編碼外,還包含了字符特性,如大小寫字母,共可包含個字符,而到現(xiàn)在只填充了其中的個位置。 項目地址:https://git.io/pytips 0x07 和 0x08 分別介紹了 Python 中的字符串類型(str)和字節(jié)類型(byte),以及...
摘要:項目地址列表推導中提到的方法可以通過簡化的語法快速構(gòu)建我們需要的列表或其它可迭代對象,與它們功能相似的,還提供列表推導的語法。 項目地址:https://git.io/pytips 0x03 - Python 列表推導 0x02 中提到的 map/filter 方法可以通過簡化的語法快速構(gòu)建我們需要的列表(或其它可迭代對象),與它們功能相似的,Python 還提供列表推導(List C...
閱讀 1136·2021-11-24 09:38
閱讀 3243·2021-11-19 09:56
閱讀 2965·2021-11-18 10:02
閱讀 735·2019-08-29 12:50
閱讀 2572·2019-08-28 18:30
閱讀 867·2019-08-28 18:10
閱讀 3675·2019-08-26 11:36
閱讀 2650·2019-08-23 18:23