1. 時(shí)間戳
1.1時(shí)間戳簡介
在正式講解時(shí)間的相關(guān)函數(shù)之前,我們必須先一個(gè)概念: 時(shí)間戳 。本文中特指unix
時(shí)間戳。
時(shí)間戳Timestamp是指在一連串的數(shù)據(jù)中加入辨識(shí)文字,如時(shí)間或者日期等,用以保障本地?cái)?shù)據(jù)更新順序和遠(yuǎn)程的一致。
unix
時(shí)間戳是從1970年1月1日(UTC/GMT的午夜)開始所經(jīng)過的秒數(shù),不考慮閏秒。1970-01-01就是經(jīng)常我們?cè)贛ySQL中時(shí)間為空的時(shí)候,轉(zhuǎn)化空的時(shí)間戳之后得到的時(shí)間。一個(gè)小時(shí)表示為UNIX時(shí)間戳格式為:3600秒;一天表示為UNIX時(shí)間戳為86400秒,閏秒不計(jì)算。具體的對(duì)照表如下:
1.2時(shí)間戳轉(zhuǎn)化網(wǎng)站
下面介紹幾個(gè)時(shí)間戳和具體時(shí)間之間相互轉(zhuǎn)化的網(wǎng)站:
1、站長工具:https://tool.chinaz.com/tools/unixtime.aspx
2、在線工具:https://tool.lu/timestamp/
3、Json在線解析:https://www.sojson.com/unixtime.html
4、Unix時(shí)間戳在線轉(zhuǎn)換(菜鳥工具):https://c.runoob.com/front-end/852
5、北京時(shí)間(時(shí)間與時(shí)間戳互換工具):http://www.beijing-time.org/shijianchuo/
介紹完時(shí)間戳的基本知識(shí),下面重點(diǎn)講解3個(gè)與時(shí)間和日期相關(guān)的Python庫:
- calendar
- time
- datetime
2.calendar
calendar
的中文意思是"日歷",所以它其實(shí)適合進(jìn)行日期,尤其是以日歷的形式展示。
2.1模塊內(nèi)容
下面舉例說明:
2.2calendar
我們顯示即將過去2020年的日歷,使用默認(rèn)的參數(shù):
import calendar
year = calendar.calendar(2020)
print(year)
改變參數(shù)再來顯示一次:
year = calendar.calendar(2020,w=3,l=1,c=8)
print(year)
我們發(fā)現(xiàn)整個(gè)日歷變寬了,而且星期的英文也是3個(gè)字母來顯示的,解釋一下3個(gè)參數(shù)的含義:
- c:每月間隔距離
- w:每日寬度間隔
- l:每星期行數(shù)
其中每行長度為:21*w+18+2*c
,3個(gè)月一行
最后,看看即將到來的2021年日歷:
2.3isleap(year)
該函數(shù)的作用是 判斷某個(gè)年份到底是不是閏年 。如果是則返回True,否則返回的是False。
普通年份能夠被4整除,但是不能被100整除,稱之為普通閏年
年份是整百數(shù)的,必須能夠被400整除,稱之為世紀(jì)閏年
2.4leapdays(y1,y2)
判斷兩個(gè)年份之間有多少個(gè)閏年 ,包含y1,但是不包含y2,類似Python切片中的包含頭部不包含尾部
2.5month(year,month,w=2,l=1)
該函數(shù)返回的是year
年的month
月的日歷,只有兩行標(biāo)題,一周一行。每日間隔寬度為w個(gè)字符,每行的長度為7*w + 6
,其中l(wèi)是每星期的行數(shù)
首先看看默認(rèn)效果;
接下來我們改變w和l兩個(gè)參數(shù):
1、改變w
,我們發(fā)現(xiàn)星期的表示變成了3個(gè)字母;同時(shí)每天之間的間隔變寬了(左右間隔)
2、改變參數(shù)l
,我們發(fā)現(xiàn)每個(gè)星期之前的間隔(上下)變寬了
2.6monthcalendar(year,month)
通過列表的形式返回year年month月的日歷,列表中還是列表形式。每個(gè)子列表是一個(gè)星期。 如果沒有本月的日期則用0表示 。每個(gè)子列表都是從星期1開始的,特點(diǎn)概括如下:
- 每個(gè)子列表代表的是一個(gè)星期
- 從星期一到星期日,沒有出現(xiàn)在本月的日期用0代替
我們還是以2020年12月份為例:
和上面的日歷進(jìn)行對(duì)比,我們發(fā)現(xiàn):出現(xiàn)0的位置的確是沒有出現(xiàn)在12月份中
我們?cè)倏纯?020年3月份的日歷:
2.7monthrange(year,month)
該函數(shù)返回的結(jié)果是一個(gè)元組,元組中有兩個(gè)數(shù)值(a,b)
- 數(shù)值a代表的是該月從星期幾開始;規(guī)定6代表星期天,取值為0-6
- 數(shù)值b代表該月總共有多少天
通過一個(gè)例子來講解,還是以2020年12月份為例:
結(jié)果中的1表示12月份從星期2開始(0-6,6代表星期日),該月總共31天
2.8weekday(y,m,d)
weekday方法是輸入年月日,我們便可知道這天是星期幾;返回值是0-6,0代表星期1,6代表星期天
通過一個(gè)例子來講解,以12月12號(hào)為例:
雙12是星期六,返回的結(jié)果是5,5代表的就是星期六,剛好吻合。
3.time
time模塊是涉及到時(shí)間功能中最常用的一個(gè)模塊 ,在Python的相關(guān)時(shí)間需求中經(jīng)常會(huì)用到,下面具體講解該模塊的使用方法。
3.1模塊內(nèi)容
先看模塊的整體使用
3.2time
time.time()
是獲取當(dāng)前的時(shí)間,更加嚴(yán)格地說,是獲取 當(dāng)前時(shí)間的時(shí)間戳 。
再次理解時(shí)間戳:它是以1970年1月1日0時(shí)0份0秒為計(jì)時(shí)起點(diǎn),計(jì)算到當(dāng)前的時(shí)間長度(不考慮閏秒)
3.3localtime
time.localtime
是 打印當(dāng)前的時(shí)間 ,得到的結(jié)果是 時(shí)間元組 ,具體含義:
筆記:結(jié)果是時(shí)間元組
time.localtime
的參數(shù)默認(rèn)是time.time()
的時(shí)間戳,可以自己輸入某個(gè)時(shí)間戳來獲取其對(duì)應(yīng)的時(shí)間
- 默認(rèn)當(dāng)前時(shí)間戳
- 指定某個(gè)時(shí)間戳
3.4gmtime
localtime()
得到的是 本地時(shí)間 ,如果需要國際化,使用gmtime()
,最好是使用格林威治時(shí)間。
格林威治標(biāo)準(zhǔn)時(shí)間:位于英國倫敦郊區(qū)的皇家格林威治天文臺(tái)的標(biāo)準(zhǔn)時(shí)間,本初子午線經(jīng)過那里。
3.5asctime
time.asctime
的參數(shù)為空時(shí),默認(rèn)是 以time.localtime的值為參數(shù) ,得到當(dāng)前的日期、時(shí)間、星期;另外,我們也可以自己設(shè)置參數(shù),參數(shù)是時(shí)間元組
- 使用當(dāng)前時(shí)間的默認(rèn)時(shí)間元組localtime
- 自己指定一個(gè)時(shí)間元組
獲取當(dāng)前時(shí)間的具體時(shí)間和日期:
3.6ctime
ctime
的參數(shù)默認(rèn)是時(shí)間戳;如果沒有,也可以指定一個(gè)時(shí)間戳
3.7mktime
mktime()
也是以時(shí)間元組為參數(shù)的,它返回的是時(shí)間戳, 相當(dāng)于是localtime
的逆向過程 :
3.8strftime
strftime()
是按照我們指定的格式 將時(shí)間元組轉(zhuǎn)化為字符串 ;如果不指定時(shí)間元組,默認(rèn)是當(dāng)前時(shí)間localtime()
。常用到的時(shí)間格式見下表:
我們舉例說明:
- 字符串中的分隔符我們可以任意指定
- 可以同時(shí)顯示年月日時(shí)分秒等
3.9strptime
strptime()
是將字符串轉(zhuǎn)化為時(shí)間元組,我們需要特別注意的是,它有兩個(gè)參數(shù):
- 待轉(zhuǎn)化的字符串
- 時(shí)間字符串對(duì)應(yīng)的格式,格式就是上面
-
模塊
+關(guān)注
關(guān)注
7文章
2613瀏覽量
47016 -
網(wǎng)站
+關(guān)注
關(guān)注
1文章
256瀏覽量
23063 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4237瀏覽量
61969 -
python
+關(guān)注
關(guān)注
53文章
4753瀏覽量
84081
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論