python如何標(biāo)準(zhǔn)化日期時(shí)間格式轉(zhuǎn)化成非標(biāo)準(zhǔn)化格式
python標(biāo)準(zhǔn)化日期時(shí)間格式轉(zhuǎn)化成非標(biāo)準(zhǔn)化格式
場景示例
1.朋友圈里好友發(fā)布的動(dòng)態(tài)帖子時(shí)間顯示為:XX天前,XX月前,剛剛,X年前...
2.聊天消息上面顯示的日期格式:剛剛,X分鐘前...
需求說明:
1.要求將類似于2024-03-05 18:00:00這樣的時(shí)間結(jié)合當(dāng)前時(shí)間轉(zhuǎn)化成1天前這樣的格式。
2.只需要知道目標(biāo)時(shí)間即可獲取轉(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ù)庫日期時(shí)間字符串
db_datetime = datetime.strptime(db_datetime_str, '%Y-%m-%d %H:%M:%S')
# 獲取當(dāng)前時(shí)間
now = datetime.now()
# 計(jì)算時(shí)間差
time_diff = now - db_datetime
# 定義時(shí)間單位的閾值
minute_diff = timedelta(minutes=1)
hour_diff = timedelta(hours=1)
day_diff = timedelta(days=1)
month_diff = timedelta(days=30) # 假設(shè)一個(gè)月平均30天
year_diff = timedelta(days=365) # 假設(shè)一年365天
# 根據(jù)時(shí)間差計(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小時(shí)前"
elif time_diff < day_diff:
return f"{time_diff.seconds // 3600}小時(shí)前"
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個(gè)月前"
elif time_diff < year_diff:
return f"{time_diff.days // 30}個(gè)月前"
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ù)傳的時(shí)間格式為:YYYY-MM-DD hh:mm:ss
3.根據(jù)時(shí)間差計(jì)算可以衍生出許多情況的表達(dá)形式,以上只是作為示例
4.代碼最后有使用演示,全部copy到項(xiàng)目跑一次就OK了!
Python時(shí)間標(biāo)準(zhǔn)化問題
Python中日期格式化是非常常見的操作,Python 中能用很多方式處理日期和時(shí)間,轉(zhuǎn)換日期格式是一個(gè)常見的功能。
1.獲取時(shí)間的基本方法
- 1.1 time.time()
time time() 函數(shù)返回當(dāng)前時(shí)間的時(shí)間戳(1970紀(jì) 元后經(jīng)過的浮點(diǎn)秒數(shù))。通常來說,時(shí)間戳表示的是從 1970 年 1 月 1 日 00:00:00 開始按秒計(jì)算的偏移量。
import time timeStamp = time.time() # print(current_time) # 輸出: 1614846609.368156
- 1.2 time.localtime()
time localtime() 函數(shù)類似gmtime(),作用是格式化時(shí)間戳為本地的時(shí)間, 以時(shí)間元祖(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. 格式化時(shí)間(基于時(shí)間元祖)
下面我們對 struct_time = time.localtime() 獲取的時(shí)間元祖形式的時(shí)間進(jìn)行格式化.
- 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:10python中時(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)
3. 時(shí)間的常用操作
- 3.1 字符串時(shí)間轉(zhuǎn)換為時(shí)間戳
t = "2021-03-04 16:30:10" #將其轉(zhuǎn)換為時(shí)間數(shù)組 timeStruct = time.strptime(t, "%Y-%m-%d %H:%M:%S" ) #轉(zhuǎn)換為時(shí)間戳: timeStamp = int (time.mktime(timeStruct)) # print (timeStamp) # 輸出: 1614846610
- 3.2 時(shí)間戳轉(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 獲得三天前的時(shí)間
import time import datetime #先獲得時(shí)間數(shù)組格式的日期 threeDayAgo = (datetime.datetime.now() - datetime.timedelta(days=3)) #轉(zhuǎn)換為時(shí)間戳: 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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python利用有道翻譯實(shí)現(xiàn)"語言翻譯器"的功能實(shí)例
小編就為大家分享一篇python利用有道翻譯實(shí)現(xiàn)"語言翻譯器"的功能實(shí)例。具有比較好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11
pandas 對每一列數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化的方法
今天小編就為大家分享一篇pandas 對每一列數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
python?pycharm安裝第三方包失敗(使用pip安裝失敗)的解決方案
這篇文章主要給大家介紹了關(guān)于python?pycharm安裝第三方包失敗(使用pip安裝失敗)的解決方案,文中將可能遇到的幾種情況都進(jìn)行了分析并給出了詳細(xì)的解決方案,需要的朋友可以參考下2023-11-11
使用Python創(chuàng)建本地HTTP服務(wù)器實(shí)現(xiàn)與外部系統(tǒng)數(shù)據(jù)對接的全過程
在Python 3.10中創(chuàng)建一個(gè)能夠處理GET和POST請求的本地HTTP服務(wù)器,并提供一個(gè)默認(rèn)的 index.html 頁面是完全可行的,本文我將提供一個(gè)實(shí)現(xiàn)方案,它包含一個(gè)自定義的請求處理器,并會(huì)說明如何創(chuàng)建?index.html?文件,需要的朋友可以參考下2025-09-09
python實(shí)現(xiàn)在pickling的時(shí)候壓縮的方法
這篇文章主要介紹了python實(shí)現(xiàn)在pickling的時(shí)候壓縮的方法,比較具有實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09
python 類的繼承 實(shí)例方法.靜態(tài)方法.類方法的代碼解析
這篇文章主要介紹了python 類的繼承 實(shí)例方法.靜態(tài)方法.類方法的代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08

