python處理時間的模塊有很多:
- time:處理時間的模塊,如獲取時間戳,格式化日期等
- datetime:date和time的結合體,處理日期和時間
- calendar:日曆相關的模塊,如:處理年曆/月曆
涉及到時間的操作:
- 不同時間格式的解析
- 不同時間格式的轉換
- 時間排序
- 時間計算
time
時間有兩種標準表示。
- 一個是數字,自大紀元以來的秒數,以UTC(a.k.a.GMT)表示。它可以是整數或浮點數(表示秒的分數)。Epoch是系統定義的;在Unix上,它通常是1970年1月1日。可以通過調用gmtime(0)來檢索實際值。
- 另一個表示是一個由9個整數組成的元組,給出了當地時間。元組項目是:
- year (including century, e.g. 1998)
- month (1-12)
- day (1-31)
- hours (0-23)
- minutes (0-59)
- seconds (0-59)
- weekday (0-6, Monday is 0)
- Julian day (day in the year, 1-366)
- DST (Daylight Savings Time) flag (-1, 0 or 1)
asctime(...)
將時間元組轉換為字符串,例如 '星期六06月16日16:26:11'。當時間元組不存在時,localtime()返回的當前時間用來。
ctime(...)
將時間戳轉換為本地時間的字符串。這相當於asctime(localtime(seconds))。 當時間元組是不存在,使用localtime()返回的當前時間。
gmtime(...)格林威治時間
gmtime([seconds]) -> (tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst)
將自大紀元以來的秒數轉換為表示UTC的時間元組(a.k.a. 格林威治標準時間)。 如果未傳入“秒”,轉換當前時間。
格林尼治標準時間(舊譯格林尼治平均時間或格林威治標準時間;英語:Greenwich Mean Time,GMT)是指位於英國倫敦郊區的皇家格林尼治天文臺的標準時間,因為本初子午線被定義在通過那裡的經線。自1924年2月5日開始,格林尼治天文臺每隔一小時會向全世界發放調時信息。
格林尼治子午線上的地方時,或零時區(中時區)的區時叫做格林尼治時間(又譯為“格林威治時間”),也叫“世界時”。
在1884年召開的華盛頓國際經度會議上,雖然規定了計算各國地方時間的方法,但是在一些 重大的全球性活動中,還需要有一個全球範圍內大家都共同遵守的統一時間。因此又規定了國際標準時間。它要求全球範圍內都以零經度線上的時間作為國際上統一採用的標準時間。 因為零經度線通過英國格林尼治天文臺,所以國際標準時間也稱為格林尼治時間,又稱世界時。
localtime(...)
localtime([seconds]) -> (tm_year,tm_mon,tm_mday,tm_hour,tm_min, tm_sec,tm_wday,tm_yday,tm_isdst)
將時間戳轉換為時間元組,如果不提供時間則將獲取當前時間信息。包含年月日時分秒,返回結果以元祖的形式返回。
mktime(...)
mktime(tuple) -> floating point number
將當地時間的時間元組轉換為時間戳。
請注意,對於大多數人來說,mktime(gmtime(0))通常不會返回零時區; 相反,返回的值將等於該值時間模塊上的timezone或altzone屬性。
sleep(...)
sleep(seconds)延遲執行給定的秒數。
strftime(...)將時間轉換為需要的格式,最常用的
strftime(format[, tuple]) -> string
根據格式規範將時間元組轉換為字符串。有關格式化代碼,請參閱庫參考手冊。 當時間元組如果不存在,則使用localtime()返回的當前時間。
常用格式代碼:
- %Y年份,世紀為十進制數。
- %m月份為十進制數[01,12]。
- %d作為十進制數的月份日期[01,31]。
- %H小時(24小時制)作為十進制數[00,23]。
- %M分鐘作為十進制數[00,59]。
- %S秒作為十進制數[00,61]。
- %z與UTC的時區偏移量。
- %Locale縮寫的工作日名稱。
- %A Locale的完整工作日名稱。
- %b Locale的縮寫月份名稱。
- %B Locale的完整月份名稱。
- %c Locale的適當日期和時間表示。
- %I小時(12小時制)作為十進制數[01,12]。
- %p Locale相當於AM或PM。
strptime(...)
strptime(string, format) -> struct_time
根據格式規範將字符串解析為時間元組。有關格式化代碼,請參閱庫參考手冊(與...相同)
的strftime())。
strftime格式化的拓展:
%a 顯示簡化星期名稱
%A 顯示完整星期名稱
%b 顯示簡化月份名稱
%B 顯示完整月份名稱
%c 本地相應的日期和時間表示
%d 顯示當月第幾天
%H 按24小時制顯示小時
%I 按12小時制顯示小時
%j 顯示當年第幾天
%m 顯示月份
%M 顯示分鐘數)
%p 本地am或者pm的相應符
%S 顯示秒數)
%U 一年中的星期數
%w 顯示在星期中的第幾天,默認從0開始表示週一
%W 和%U基本相同
%x 本地相應日期
%X 本地相應時間
%y 去掉世紀的年份(00 - 99)
%Y 完整的年份
%Z 時區的名字(如果不存在為空字符)
%% ‘%’字符
time(...)
time() -> floating point number
返回自Epoch以來的當前時間(以秒為單位)。如果系統時鐘提供它們,則可以存在一秒的分數。
用來獲取時間戳:time.time()
劃重點:
時間的表現形式:
- 時間戳(timestamp):time.time()
時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數。通俗的講, 時間戳是一份能夠表示一份數據在一個特定時間點已經存在的完整的可驗證的數據。 它的提出主要是為用戶提供一份電子證據, 以證明用戶的某些數據的產生時間。
- 時間元組(struct_time):time,localtime()
- 時間字符串(Format string)
'2011-05-05 16:37:06'
轉化關係:
- 日期字符串 --> 時間元組:time.strptime(string, format)
- 時間元組--> 日期字符串:time.strftime(format,[, tuple])
- 時間元組 --> 時間戳time.mktime(p_tuple):p_tuple:時間元組
- 時間戳--> 時間元組time.localtime([seconds])
- 時間元組 --> 固定形式的字符串astime()
- 時間戳 --> 固定形式的字符串ctime()
實際應用:
說了再多你也不會明白,下面通過實際應用場景來演示:
應用場景1,提取需要的時間:
- 如何獲取某個時間的小時,分鐘,秒,年,月,日
如果是一個時間戳:
t2=time.localtime(time.time())
print("年:",t2.tm_year)
print("月:",t2.tm_mon)
print("日:",t2.tm_mday)
print("小時:",t2.tm_hour)
print("分鐘:",t2.tm_min)
print("秒:",t2.tm_sec)
print("星期(星期一為0):",t2.tm_wday)
print("一年當中第:%s天"%t2.tm_yday)
如果是一個具體的時間:
'2011-05-05 16:37:06'
方法一:可以採用和剛才一樣的方法
t2=time.strptime('2019-09-04 13:37:06', '%Y-%m-%d %X')
print("年:",t2.tm_year)
print("月:",t2.tm_mon)
print("日:",t2.tm_mday)
print("小時:",t2.tm_hour)
print("分鐘:",t2.tm_min)
print("秒:",t2.tm_sec)
print("星期(星期一為0):",t2.tm_wday)
print("一年當中第:%s天"%t2.tm_yday)
方法二:利用strftime格式化取出需要的
t2=time.strptime('2019-09-04 13:37:06', '%Y-%m-%d %X')
print("年:",time.strftime("%Y",t2))
print("月:",time.strftime("%m",t2))
print("日:",time.strftime("%d",t2))
print("時:",time.strftime("%H",t2))
print("分:",time.strftime("%M",t2))
print("秒:",time.strftime("%S",t2))
最重要的一個應用就是時間字符串的格式化:
簡單來講就是你現在有一個時間字符串,你需要將其轉化為需要的格式:
如果是利用time模塊,需要進行兩步轉化才能實現格式化:
t = "2017-11-24 17:30:00"
time.strftime("%Y/%m/%d",time.strptime('2019-09-04 13:37:06', '%Y-%m-%d %X'))
接下來講一下處理時間常用的第二個模塊:datetime
datetime模塊以簡單和複雜的方式提供用於操作日期和時間的類。雖然支持日期和時間算法,但實現的重點是有效的屬性提取,用於輸出格式和操作。
datetime庫定義了2個常量和5個類。
2個常量分別是MINYEAR=1和MAXYEAR=9999。
5個類分別是:
- date類:表示日期的類
- time類:表示時間的類
- datetime類:表示時間日期的類
- timedelta類:表示兩個datetime對象的差值;
- tzinfo類:表示時區的相關信息
今天沒寫完,明天繼續寫。
閱讀更多 嘩啦圈的夢 的文章