轉(zhuǎn)自:http://www.byhy.net/tut/py/extra/date_time/
Python中,對日期和時間的操作,主要使用這3個內(nèi)置模塊: datetime 坝茎、 time 和 calendar
獲取當(dāng)前時間對應(yīng)的數(shù)字
開發(fā)程序時拱烁,經(jīng)常需要獲取兩個代碼位置在執(zhí)行時的時間差,比如崩哩,我們想知道某個函數(shù)執(zhí)行大概耗費了多少時間巡球,就可以使用time.time()來做。
import time
before = time.time()
func1()
after = time.time()
print(f"調(diào)用func1邓嘹,花費時間{after-before}")
time.time() 會返回 從 1970年1月1日0點(所謂的epoch時間點) 到 當(dāng)前時間的 經(jīng)過的秒數(shù) 酣栈,可以簡稱為秒數(shù)時間。 關(guān)于該函數(shù)的詳細(xì)解釋汹押,請點擊這里參考官方文檔
指定格式字符串顯示時間
點擊這里矿筝,邊看視頻講解,邊學(xué)習(xí)以下內(nèi)容
以指定格式字符串顯示時間棚贾,是非常常用的窖维,比如日志里面的時間戳。
要得到 當(dāng)前時間
對應(yīng)的字符串妙痹,可以這樣實現(xiàn):
from datetime import datetime
str(datetime.now())
得到類似這樣的字符串:‘2018-06-30 23:10:08.911420’
如果要指定輸出的時間格式铸史,可以像下面這樣
datetime.now().strftime('%Y-%m-%d ** %H:%M:%S')
得到類似這樣的字符串: ‘2019-02-24 ** 16:56:55’
當(dāng)然,也可以使用time庫來格式化顯示字符串
time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
數(shù)字表示的時間轉(zhuǎn)化為字符串表示
如果要將某個指定秒數(shù)時間(從epoch時間點開始計算)怯伊,而不是當(dāng)前時間琳轿,轉(zhuǎn)化為字符串格式,可以這樣寫
time.strftime('%Y%m%d %H:%M:%S',time.localtime(1434502529))
字符串時間轉(zhuǎn)化為整數(shù)時間
反過來,如果要將字符串指定的時間利赋,轉(zhuǎn)化為秒數(shù)時間水评,可以這樣
int(time.mktime(time.strptime('2015-08-01 23:59:59', '%Y-%m-%d %H:%M:%S')))
ISO格式 轉(zhuǎn)化為 本地時間
有的時候,我們的程序獲取的時間是 ISO 8601 格式的字符串媚送。
比如:
2008-09-03T20:56:35.450686+00:00
2008-09-03T20:56:35.450686Z
可以通過如下方法轉(zhuǎn)化為 本地格式
from datetime import timezone
import dateutil.parser
# 字符串時間 轉(zhuǎn)化為 datetime 對象
dt = dateutil.parser.isoparse('2008-09-03T20:56:35.450686+00:00')
# 根據(jù)時區(qū) 轉(zhuǎn)化為 datetime 數(shù)據(jù)
localdt = dt.replace(tzinfo=timezone.utc).astimezone(tz=None)
# 產(chǎn)生本地格式 字符串
localdt.strftime('%Y-%m-%d %H:%M:%S')
獲取某個時間 對應(yīng) 的年月日時分秒數(shù)字
要獲取 當(dāng)前時間
的 年中燥、月、日塘偎、時疗涉、分、秒吟秩、星期幾 對應(yīng)的數(shù)字咱扣,可以使用datetime庫
>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2018, 6, 30, 23, 3, 54, 238947)
# 年
>>> datetime.now().year
2018
# 月
>>> datetime.now().month
6
# 日
>>> datetime.now().day
30
# 時
>>> datetime.now().hour
23
# 分
>>> datetime.now().minute
7
# 秒
>>> datetime.now().second
58
# 毫秒
>>> datetime.now().microsecond
151169
# 獲取星期幾用 weekday方法
# 0 代表星期一,1 代表星期二 依次類推
>>> datetime.now().weekday()
5
獲得指定時間字符串對應(yīng)星期幾
如果要獲取的是 某個指定時間涵防,比如 “2018-6-24”闹伪,而不是當(dāng)前時間,對應(yīng)的星期幾壮池,怎么辦偏瓤?
可以使用 datetime類的 strptime方法,先產(chǎn)生對應(yīng)的 datetime對象
# 要計算出 2018年6月24日 是星期幾
thatDay = "2018-6-24"
from datetime import datetime
# 先把字符串表示的日期轉(zhuǎn)化為 datetime 對象
theDay = datetime.strptime(thatDay, "%Y-%m-%d")
#再獲取星期幾
theDay.weekday()
從某個時間點往前或者后推 一段時間
如果我們想知道椰憋,2018年6月24日 往后推120天厅克,是什么日期?星期幾橙依?
往前推120天证舟,又是什么日期?星期幾窗骑?
可以這樣計算
thatDay = "2018-6-24"
from datetime import datetime,timedelta
theDay = datetime.strptime(thatDay, "%Y-%m-%d").date()
# 后推120天 就是 + timedelta(days=120)
target = theDay + timedelta(days=120)
print(target)
print(target.weekday())
# 前推120天 就是 - timedelta(days=120)
target = theDay - timedelta(days=120)
print(target)
print(target.weekday())
獲得指定日期那周的周一
thatDay = "2018-6-30"
from datetime import datetime,timedelta
theDay = datetime.strptime(thatDay, "%Y-%m-%d").date()
# 這就是 2018-6-30 那一周的周一
weekMonday = theDay - timedelta(days=theDay.weekday())
獲取某個月總共有多少天
最方便的方法是使用 calendar 模塊里面的 函數(shù)
from calendar import monthrange
# monthrange返回的是元組
# 第一個元素是指定月第一天是星期幾
# 第二個元素是指定月有多少天
mr = monthrange(2011, 2)
# 得到2011年2月有多少天
print(mr[1])