datatime
time
calendar
獲取當前的日期和時間
格式化日期和時間
計算兩個時間的差值
在進行日期和時間操作前,我們必須先理解以下幾個常用的術語
格林威治標準時間,英文縮寫為GMT是指位於英國倫敦郊區的皇家格林尼治天文臺的標準時間
時間起點,國際標準的時間起點為1970年1月1日00:00:00
時間戳,當前時間與時間起點之間經過的秒數
時區,不同國家,地區之間存在時差,為了方便換算,規定格林尼治天文臺為中時區,依次為零點,每15經度定義一個時區,每個時區時差為1小時,全球共劃分為24個時區
夏令時,英文縮寫為DST,是一種人為規定的時間制度,在夏季將時間調快1小時,以達到早睡早起,節約能源的目的,在秋冬季的某一天再將時間調整回來。世界範圍內有一百多個國家實行夏令時制度,每個國家的夏令時起止時間不同,我國從1992年之後,不再實行夏令時
下面來看每個模塊的常見用法
該模塊主要用來獲取當前時間,並進行格式化,基本用法如下
> import time
# 返回時間戳
> time.time()
1589853649.8406465
# 以struc_time元組的形式返回當前時間
> time.localtime()
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=19, tm_hour=9, tm_min=6, tm_sec=56, tm_wday=1, tm_yday=140, tm_isdst=0)
# 以struc_time元組的形式返回當前時間
> time.gmtime()
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=19, tm_hour=2, tm_min=0, tm_sec=8, tm_wday=1, tm_yday=140, tm_isdst=0)
struc_time元組包含了9個元素,每個元素的含義如下
tm_year, 表示年份,四位數
tm_mon, 表示月份,1到12之間的一個數字
tm_mday,表示每月的第幾天,1到31之間的一個數字
tm_hour, 表示小時,0到23之間的一個數字
tm_min, 表示分鐘數,0到59之間的一個數字
tm_sec, 表示秒數,0到61之間第一個數字
tm_wday,表示星期,0到6之間的一個數字,0表示星期一,依次類推
tm_yaday,表示一年中的第幾日,1到366之家的一個數字
tm_isdst, 是否為夏令時,1表示是,0表示否,-1表示未知
struc_time元組可以輕鬆訪問其中的內容,用法如下
>>> time.localtime().tm_year
2020
>>> time.localtime().tm_mon
5
>>> time.localtime().tm_mday
19
>>> time.localtime().tm_hour
10
>>> time.localtime().tm_min
50
>>> time.localtime().tm_sec
18
日期的格式化和字符串格式化類似,內置了格式化標識符,通過strftime函數來進行格式化,每個標識符的作用如下
# %a表示星期的縮寫
'%a', time.localtime()) > time.strftime(
'Tue'
# %A表示星期的全稱
'%A', time.localtime()) > time.strftime(
'Tuesday'
# %b表示月份的縮寫
'%b', time.localtime()) > time.strftime(
'May'
# %B表示月份的全稱
'%B', time.localtime()) > time.strftime(
'May'
# %c表示
'%c', time.localtime()) > time.strftime(
'Tue May 19 09:33:57 2020'
# %d表示每月的第幾天
'%d', time.localtime()) > time.strftime(
'19'
# %H為十進位表示的小時, 24小時制,範圍為00-23
'%H', time.localtime()) > time.strftime(
'09'
# %I為十進位表示的小時,12小時制,範圍為01-12
'%I', time.localtime()) > time.strftime(
'09'
# %j表示一年中的第幾天
'%j', time.localtime()) > time.strftime(
'140'
# %m表示十進位的月份,範圍為01-12
'%m', time.localtime()) > time.strftime(
'05'
# %M表示十進位的分鐘,範圍為00到59
'%M', time.localtime()) > time.strftime(
'34'
# %p表示上午或者下午,值為AM或PM
'%p', time.localtime()) > time.strftime(
'AM'
# %S表示秒數,範圍00到61
'%S', time.localtime()) > time.strftime(
'36'
# %U表示一年中的周數,範圍為00-53
'%U', time.localtime()) > time.strftime(
'20'
# %w表示一周中的第幾天,範圍0-6,0表示星期日,以此類推
'%w', time.localtime()) > time.strftime(
'2'
# %W表示一年中的周數,範圍為00-53
'%W', time.localtime()) > time.strftime(
'20'
# %x以本地規則表示日期
'%x', time.localtime()) > time.strftime(
'05/19/20'
# %X以本地規則表示時間
'%X', time.localtime()) > time.strftime(
'09:34:51'
# %y表示沒有世紀的年份,即4位數年份的後兩位
'%y', time.localtime()) > time.strftime(
'20'
# %Y表示完整年份
'%Y', time.localtime()) > time.strftime(
'2020'
# %z表示時區偏移
'%z', time.localtime()) > time.strftime(
'+0800'
# %Z 表示時區名稱
'%Z', time.localtime()) > time.strftime(
'CST'
# %% 表示一個百分號字面值
'%%', time.localtime()) > time.strftime(
'%'
如果只是簡單的格式化當前日期,內置的函數acstime和ctime是最簡單的方式,當然也可以用多種格式化標識符進行組合,靈活的格式化日期,用法如下
>>> time.asctime()
'Tue May 19 10:52:51 2020'
>>> time.ctime()
'Tue May 19 09:59:11 2020'
>>> time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
'2020-05-19 09:50:50'
> import datetime
# 獲取當前日期
> a = datetime.date.today()
> datetime.date.today()
datetime.date(2020, 5, 19)
# 獲取年,月,日
> a.year
2020
> a.month
5
> a.day
19
# 格式化
> a.isoformat()
'2020-05-19'
# 獲取當前的日期和時間
> datetime.datetime.now()
datetime.datetime(2020, 5, 19, 10, 56, 50, 225742)
> a = datetime.datetime.now()
# 獲取年,月,日,時,分,秒
> a.year
2020
> a.month
5
> a.day
19
> a.hour
10
> a.minute
56
> a.second
53
# 計算前一天的時間
1) > datetime.datetime.now() - datetime.timedelta(days =
datetime.datetime(2020, 5, 18, 11, 5, 40, 612206)
# 計算1小時後的時間
3600) > datetime.datetime.now() + datetime.timedelta(seconds =
datetime.datetime(2020, 5, 19, 12, 8, 3, 839407)
該模塊用於處理日曆信息,內置了月份和星期的列表,可以當做一個常量來使用,用法如下
# 月份的列表
for i in calendar.month_name] [i
['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
# 星期的列表
for i in calendar.day_name] [i
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
除此之外,也提供了一些年份相關的函數
# 判斷一個年份是否為閏年
1997) > calendar.isleap(
False
2020) > calendar.isleap(
True
# 返回兩個年份間閏年的個數
1997, 2020) > calendar.leapdays(
5
對於日期和時間而言,最常用的還是time和datetime兩個模塊,掌握常用的日期獲取和格式化操作,就足夠應付大多數的開發需求了。
·end·