python如何標(biāo)準(zhǔn)化日期時間格式轉(zhuǎn)化成非標(biāo)準(zhǔn)化格式
python標(biāo)準(zhǔn)化日期時間格式轉(zhuǎn)化成非標(biāo)準(zhǔn)化格式
場景示例
1.朋友圈里好友發(fā)布的動態(tài)帖子時間顯示為:XX天前,XX月前,剛剛,X年前...
2.聊天消息上面顯示的日期格式:剛剛,X分鐘前...
需求說明:
1.要求將類似于2024-03-05 18:00:00這樣的時間結(jié)合當(dāng)前時間轉(zhuǎn)化成1天前這樣的格式。
2.只需要知道目標(biāo)時間即可獲取轉(zhuǎn)化結(jié)果,如YYYY-MM-DD hh:mm:ss轉(zhuǎn)成XXXX
廢話不多說,直接代碼演示:
from datetime import datetime, timedelta def humanize_datetime(db_datetime_str): # 解析數(shù)據(jù)庫日期時間字符串 db_datetime = datetime.strptime(db_datetime_str, '%Y-%m-%d %H:%M:%S') # 獲取當(dāng)前時間 now = datetime.now() # 計算時間差 time_diff = now - db_datetime # 定義時間單位的閾值 minute_diff = timedelta(minutes=1) hour_diff = timedelta(hours=1) day_diff = timedelta(days=1) month_diff = timedelta(days=30) # 假設(shè)一個月平均30天 year_diff = timedelta(days=365) # 假設(shè)一年365天 # 根據(jù)時間差計算描述 if time_diff < minute_diff: return "剛剛" elif time_diff < 2 * minute_diff: return "1分鐘前" elif time_diff < hour_diff: return f"{time_diff.seconds // 60}分鐘前" elif time_diff < 2 * hour_diff: return "1小時前" elif time_diff < day_diff: return f"{time_diff.seconds // 3600}小時前" elif time_diff < 2 * day_diff: return "昨天" elif time_diff < month_diff: return f"{time_diff.days // 7}周前" elif time_diff < 2 * month_diff: return "1個月前" elif time_diff < year_diff: return f"{time_diff.days // 30}個月前" elif time_diff < 2 * year_diff: return "半年前" else: return db_datetime.strftime('%Y-%m-%d %H:%M:%S') # 示例使用 # db_datetime = "2024-03-04 16:30:00" # print(humanize_datetime(db_datetime))
代碼說明:
1.以上代碼中引入的包是python自帶的
2.該函數(shù)傳的時間格式為:YYYY-MM-DD hh:mm:ss
3.根據(jù)時間差計算可以衍生出許多情況的表達形式,以上只是作為示例
4.代碼最后有使用演示,全部copy到項目跑一次就OK了!
Python時間標(biāo)準(zhǔn)化問題
Python中日期格式化是非常常見的操作,Python 中能用很多方式處理日期和時間,轉(zhuǎn)換日期格式是一個常見的功能。
1.獲取時間的基本方法
- 1.1 time.time()
time time() 函數(shù)返回當(dāng)前時間的時間戳(1970紀(jì) 元后經(jīng)過的浮點秒數(shù))。通常來說,時間戳表示的是從 1970 年 1 月 1 日 00:00:00 開始按秒計算的偏移量。
import time timeStamp = time.time() # print(current_time) # 輸出: 1614846609.368156
- 1.2 time.localtime()
time localtime() 函數(shù)類似gmtime(),作用是格式化時間戳為本地的時間, 以時間元祖(struct_time)的形式返回。
import time struct_time = time.localtime() # print(struct_time) # 輸出: time.struct_time(tm_year=2021, tm_mon=3, tm_mday=4, tm_hour=16, tm_min=30, tm_sec=10, tm_wday=3, tm_yday=63, tm_isdst=0)
- 1.3 datetime.datetime.now()
import datetime data_time = datetime.datetime.now() # print(data_time) # 輸出: 2021-03-04 16:30:10.000000
2. 格式化時間(基于時間元祖)
下面我們對 struct_time = time.localtime() 獲取的時間元祖形式的時間進行格式化.
- 2.1 time.asctime()
format_time_1 = time.asctime(struct_time) # print(format_time_1) # 輸出: Thu Mar 4 16:30:10 2021
- 2.2 time.strftime()
format_time_2 = time.strftime("%Y-%m-%d %H:%M:%S", struct_time) # print(format_time_2) # 輸出: 2021-03-04 16:30:10
python中時間日期格式化符號:
%y 兩位數(shù)的年份表示(00-99) %Y 四位數(shù)的年份表示(000-9999) %m 月份(01-12) %d 月內(nèi)中的一天(0-31) %H 24小時制小時數(shù)(0-23) %I 12小時制小時數(shù)(01-12) %M 分鐘數(shù)(00=59) %S 秒(00-59)
3. 時間的常用操作
- 3.1 字符串時間轉(zhuǎn)換為時間戳
t = "2021-03-04 16:30:10" #將其轉(zhuǎn)換為時間數(shù)組 timeStruct = time.strptime(t, "%Y-%m-%d %H:%M:%S" ) #轉(zhuǎn)換為時間戳: timeStamp = int (time.mktime(timeStruct)) # print (timeStamp) # 輸出: 1614846610
- 3.2 時間戳轉(zhuǎn)換為指定格式日期
timeStamp = 1614846610 localTime = time.localtime(timeStamp) strTime = time.strftime( "%Y-%m-%d %H:%M:%S" , localTime) print (strTime) # 輸出: 2021-03-04 16:30:10
- 3.3 獲得三天前的時間
import time import datetime #先獲得時間數(shù)組格式的日期 threeDayAgo = (datetime.datetime.now() - datetime.timedelta(days=3)) #轉(zhuǎn)換為時間戳: timeStamp = int(time.mktime(threeDayAgo.timetuple())) #轉(zhuǎn)換為其他字符串格式: strTime = threeDayAgo.strftime( "%Y-%m-%d %H:%M:%S" ) # print (strTime) # 輸出: 2021-03-01 16:30:10
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python面向?qū)ο蟪绦蛟O(shè)計之繼承與多繼承用法分析
這篇文章主要介紹了Python面向?qū)ο蟪绦蛟O(shè)計之繼承與多繼承用法,結(jié)合實例形式分析了Python繼承與多繼承的簡單定義與使用方法,需要的朋友可以參考下2018-07-07pandas 對日期類型數(shù)據(jù)的處理方法詳解
這篇文章主要介紹了pandas 對日期類型數(shù)據(jù)的處理方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08淺談TensorFlow中讀取圖像數(shù)據(jù)的三種方式
這篇文章主要介紹了淺談TensorFlow中讀取圖像數(shù)據(jù)的三種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06