編寫Python程序,處理日期和時(shí)間經(jīng)常會(huì)遇到,幸好Python本身集成了很多日期、時(shí)間相關(guān)的模塊,讓這件繁瑣的工作變的方便。本文介紹Python中功能強(qiáng)大的datetime模塊。
datetime模塊專門處理涉及時(shí)間相關(guān)的工作,比如日期、小時(shí)、分鐘、秒、星期、月、年等,該模塊也提供其他高級(jí)的功能,如操作時(shí)區(qū)和夏令時(shí),同時(shí)還能夠處理時(shí)間戳等。datetime模塊有五個(gè)常用的類:
下面對(duì)datetime模塊常用的類和函數(shù)做介紹:
datetime類是datetime模塊中功能最強(qiáng)大的類,它可以同時(shí)操作日期和時(shí)間。
1,得到當(dāng)前時(shí)間,通過datetime類的一個(gè)簡單函數(shù)就可以實(shí)現(xiàn):
#!/usr/bin/env pythonimport datetimedatetime_now = datetime.datetime.now() #now是一個(gè)類函數(shù)print(datetime_now)
輸出:
2021-04-05 13:31:08.192648
2,從日期字符串中得到y(tǒng)ear和month信息
使用strptime和strftime實(shí)現(xiàn)字符串到datetime對(duì)象的轉(zhuǎn)換,
datetime_string = '2021-04-05'datetime_obj = datetime.datetime.strptime(datetime_string, '%Y-%m-%d')print(datetime_obj)print(datetime_obj.year)print(datetime_obj.month)
輸出:
2021-04-05 00:00:0020214
得到小時(shí)和分鐘信息類似,因?yàn)閐atetime對(duì)象有hour和minute屬性。
3,從日期字符串中得到星期幾的信息
在上面代碼的基礎(chǔ)上,添加下面的代碼:
print(datetime_obj.weekday())
輸出:
0
0代表的就是周一,但這樣不直觀,通過Python的calendar模塊可以讓輸出更直觀。
import calendarprint(calendar.day_name[datetime_obj.weekday()])
輸出:
Monday
4,得到當(dāng)前的周是本年的第幾周
為了得到這個(gè)結(jié)果,我們是不是要進(jìn)行復(fù)雜的數(shù)學(xué)計(jì)算,當(dāng)然不用,datetime模塊已經(jīng)集成了相關(guān)的函數(shù),通過調(diào)用datetime對(duì)象的函數(shù)ioscalendar就可以。
datetime_obj.isocalendar()
輸出:
(2021, 14, 1)
上面函數(shù)輸出的結(jié)果是一個(gè)三元組,其中第二個(gè)元素就是本周是今年的第幾個(gè)周。
5,實(shí)現(xiàn)datetime對(duì)象和Unix timestamp的轉(zhuǎn)換
Unix timestamp因?yàn)榉奖愠绦蛱幚恚趯?shí)際代碼編寫過程中經(jīng)常遇到,依賴datetime模塊可以非常方便地實(shí)現(xiàn)Unix timestamp和datetime對(duì)象的轉(zhuǎn)換,
from datetime import datetime# 得到當(dāng)前的日期和時(shí)間now = datetime.now()# 轉(zhuǎn)換當(dāng)前時(shí)間到時(shí)間戳timestamp = datetime.timestamp(now)print('Timestamp:', timestamp)#轉(zhuǎn)換時(shí)間戳到datetime對(duì)象datetime_obj = datetime.fromtimestamp(1617626697.906258)print('Datetime Object:',datetime_obj)
輸出:
Timestamp:1617626697.906258Datetime Object:2021-04-05 20:44:57.906258
6,時(shí)間跨度的計(jì)算
有時(shí)程序的判斷條件依賴過去或?qū)淼臅r(shí)間點(diǎn),這時(shí)可以使用datetime模塊的timedelta類。
from datetime import datetime, timedelta# 得到當(dāng)前時(shí)間now = datetime.now()print ('Today is:',now)#10天后的時(shí)間,如果用周計(jì)算,將days改為weeksdate_after_ten_days = now + timedelta(days = 10)print('Date after 10 days: ', date_after_ten_days)
輸出:
Today is: 2021-04-05 21:06:17.844471Date after 10 days: 2021-04-15 21:06:17.844471
總結(jié)
聯(lián)系客服