時(shí)間格式轉(zhuǎn)換分為兩種,時(shí)間轉(zhuǎn)換為字符串和字符串轉(zhuǎn)換為時(shí)間,具體代碼例子如下:
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供蘭陵網(wǎng)站建設(shè)、蘭陵做網(wǎng)站、蘭陵網(wǎng)站設(shè)計(jì)、蘭陵網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、蘭陵企業(yè)網(wǎng)站模板建站服務(wù),10年蘭陵做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
1?import?datetime
2?import?time
3?#?日期轉(zhuǎn)換為字符串,使用strftime()函數(shù)
4?#?time.strftime(format[,?t])
5
6?print?datetime.datetime.now()
7?print?datetime.datetime.now().strftime("%Y-%m-%d
%H:%M:%S")
8?print?datetime.datetime.now().strftime("%b
%d?%Y?%H:%M:%S")
9?print?datetime.datetime.now().strftime("%c
%d?%Y?%H:%M:%S")
10?#?字符串轉(zhuǎn)換為日期,使用strptime()函數(shù)
11?t?=?(2009,?2,?17,?8,?3,?38,?1,?48,?0)
12?t?=?time.mktime(t)
13?print?time.strftime("%b?%d?%Y?%H:%M:%S",time.gmtime(t))
14?print?time.strftime("%Y-%m-%d?%H:%M:%S",time.gmtime(t))
注:格式字符說明:
python中時(shí)間日期格式化符號:
%y
兩位數(shù)的年份表示(00-99)
%Y
四位數(shù)的年份表示(000-9999)
%m
月份(01-12)
%d
月內(nèi)中的一天(0-31)
%H
24小時(shí)制小時(shí)數(shù)(0-23)
%I
12小時(shí)制小時(shí)數(shù)(01-12)
%M
分鐘數(shù)(00=59)
%S
秒(00-59)
%a
本地簡化星期名稱
%A
本地完整星期名稱
%b
本地簡化的月份名稱
%B
本地完整的月份名稱
%c
本地相應(yīng)的日期表示和時(shí)間表示
%j
年內(nèi)的一天(001-366)
%p
本地A.M.或P.M.的等價(jià)符
%U
一年中的星期數(shù)(00-53)星期天為星期的開始
%w
星期(0-6),星期天為星期的開始
%W
一年中的星期數(shù)(00-53)星期一為星期的開始
%x
本地相應(yīng)的日期表示
%X
本地相應(yīng)的時(shí)間表示
%Z
當(dāng)前時(shí)區(qū)的名稱
%%
%號本身
time模塊是python專門用來處理時(shí)間的內(nèi)建庫。
下面我們來記錄一些基本使用方法。
ps: 用到了一些概念,比如unix時(shí)間戳,感興趣的同學(xué)自行百度。
下文參考他人博客內(nèi)容, 傳送門
time.time()函數(shù)獲取的是Unix時(shí)間戳。
返回的是一個(gè)float類型的數(shù)值。
在python中的time模塊中定義了一個(gè)叫struct_time的元組,是用來構(gòu)建時(shí)間對象的。
struct_time元組共9個(gè)元素組成,如下圖:
這個(gè)函數(shù)可以接受一個(gè)unix時(shí)間戳,然后轉(zhuǎn)換為struct_time。
如果不傳入second參數(shù),則會返回當(dāng)前時(shí)間的時(shí)間戳的struct_time對象
再試試傳入當(dāng)前時(shí)間的時(shí)間戳,是否能得到上面的struct_time呢?
和我們預(yù)期的結(jié)果一致。
和localtime函數(shù)類似,默認(rèn)情況gmtime函數(shù)獲取當(dāng)前時(shí)間的utc時(shí)間。
返回當(dāng)前時(shí)間的utc時(shí)間的struct_time對象。
也可以傳入任意的unix時(shí)間戳,來得到utc時(shí)間。
將一個(gè)時(shí)間戳struct_time對象轉(zhuǎn)換為時(shí)間戳。
傳入一個(gè)struct_time對象,返回"Sun Jun 20 23:21:05 1993"這種格式的字符串。不傳參數(shù),返回當(dāng)前時(shí)間的這種格式的字符串。
傳入格式和struct_time,返回按照format格式格式化后的時(shí)間字符串。
格式占位符可以參考下圖:
將字符串時(shí)間轉(zhuǎn)為struct_time,time.strftime()的逆向操作。
5位數(shù)日期戳讀取 .mat 文件處理里面數(shù)據(jù)時(shí),發(fā)現(xiàn)里面的日期數(shù)據(jù)全部都是 “5位數(shù)” 數(shù)字,很不解;后來查到可以在excel中通過設(shè)置單元格調(diào)回標(biāo)準(zhǔn)日期格式,如下:選中日期戳,右鍵選擇 “格式化單元格(Format Cells)”選擇需要的日期格式,點(diǎn)擊ok即可通過代碼轉(zhuǎn)成標(biāo)準(zhǔn)日期例如這個(gè)DataFrame中的日期,全部都是“日期戳”格式的,但我需要的是人能看懂的“標(biāo)準(zhǔn)日期”;確認(rèn)起始日期首先需拿一個(gè)“日期戳”對應(yīng)的時(shí)間(標(biāo)準(zhǔn)日期),減去這個(gè)日期戳,得出起始時(shí)間。獲取起始時(shí)間:2018-05-02 對應(yīng)的日期戳為:43222,接下來通過pandas 的Timedelta()和 to_datetime() 獲取起始時(shí)間??梢钥吹狡鹗既掌跒椤?899-12-30”這樣一來后續(xù)日期戳轉(zhuǎn)標(biāo)準(zhǔn)日期,只需要在 “1899-12-30” 的基礎(chǔ)上加 “日期戳”即可。批量轉(zhuǎn)換首先定義一個(gè)函數(shù)用來進(jìn)行轉(zhuǎn)換:#定義轉(zhuǎn)化日期戳的函數(shù),stamp為日期戳def date(stamp):delta = pd.Timedelta(str(stamp)+'D')real_time = pd.to_datetime('1899-12-30') + deltareturn real_time然后針對DataFrame需要轉(zhuǎn)換的列進(jìn)行轉(zhuǎn)換即可:
最近寫的項(xiàng)目用到了knn模型進(jìn)行預(yù)測性分析,但是需要把日期型的字段轉(zhuǎn)為整型,換言之,就是時(shí)間戳。
將時(shí)間轉(zhuǎn)換成時(shí)間戳
例如:
將時(shí)間2019-4-13 10:02:23轉(zhuǎn)換成時(shí)間戳,具體的操作過程為:
利用strptime()函數(shù)將時(shí)間轉(zhuǎn)換成時(shí)間數(shù)組
利用mktime()函數(shù)將時(shí)間數(shù)組轉(zhuǎn)換成時(shí)間戳
import time
dt = "2019-4-13 10:02:23"
# 轉(zhuǎn)為時(shí)間數(shù)組
timeArray = time.strptime(dt,"%Y-%m-%d %H:%M:%S")
# 轉(zhuǎn)為時(shí)間戳
timeStamp = int(time.mktime(timeArray))
print(timeStamp)
在進(jìn)行新紀(jì)元時(shí)間(1970-01-01 00:00:00)以來的秒到實(shí)際時(shí)間之間轉(zhuǎn)換的時(shí)候 MySQL 根據(jù)參數(shù) time_zone 的設(shè)置有兩種選擇:
time_zone?設(shè)置為 SYSTEM 的話:使用 sys_time_zone 獲取的 OS 會話時(shí)區(qū),同時(shí)使用 OS API 進(jìn)行轉(zhuǎn)換。對應(yīng)轉(zhuǎn)換函數(shù) Time_zone_system::gmt_sec_to_TIME
time_zone?設(shè)置為實(shí)際的時(shí)區(qū)的話:比如 ‘+08:00’,那么使用使用 MySQL 自己的方法進(jìn)行轉(zhuǎn)換。對應(yīng)轉(zhuǎn)換函數(shù) Time_zone_offset::gmt_sec_to_TIME
實(shí)際上 Time_zone_system 和 Time_zone_offset 均繼承于 Time_zone 類,并且實(shí)現(xiàn)了 Time_zone 類的虛函數(shù)進(jìn)行了重寫,因此上層調(diào)用都是 Time_zone::gmt_sec_to_TIME。
這需求折騰了我半天..
import time
import datetime as datetime
def late_time(time2):
# 先獲得時(shí)間數(shù)組格式的日期
#time2是外部傳入的任意日期
now_time = datetime.datetime.strptime(time2, '%Y-%m-%d')
#如需求是當(dāng)前時(shí)間則去掉函數(shù)參數(shù)改寫 ? ? ?為datetime.datetime.now()
threeDayAgo = (now_time - datetime.timedelta(days =30))
# 轉(zhuǎn)換為時(shí)間戳
timeStamp =int(time.mktime(threeDayAgo.timetuple()))
# 轉(zhuǎn)換為其他字符串格式
otherStyleTime = threeDayAgo.strftime("%Y-%m-%d")
return otherStyleTime
a = late_time("2019-3-30")
print(a)# 打印2018-02-28