python如何标准化日期时间格式转化成非标准化格式
作者:够力小哥
这篇文章主要介绍了python如何标准化日期时间格式转化成非标准化格式问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
python标准化日期时间格式转化成非标准化格式
场景示例
1.朋友圈里好友发布的动态帖子时间显示为:XX天前,XX月前,刚刚,X年前...
2.聊天消息上面显示的日期格式:刚刚,X分钟前...
需求说明:
1.要求将类似于2024-03-05 18:00:00这样的时间结合当前时间转化成1天前这样的格式。
2.只需要知道目标时间即可获取转化结果,如YYYY-MM-DD hh:mm:ss转成XXXX
废话不多说,直接代码演示:
from datetime import datetime, timedelta def humanize_datetime(db_datetime_str): # 解析数据库日期时间字符串 db_datetime = datetime.strptime(db_datetime_str, '%Y-%m-%d %H:%M:%S') # 获取当前时间 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) # 假设一个月平均30天 year_diff = timedelta(days=365) # 假设一年365天 # 根据时间差计算描述 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.该函数传的时间格式为:YYYY-MM-DD hh:mm:ss
3.根据时间差计算可以衍生出许多情况的表达形式,以上只是作为示例
4.代码最后有使用演示,全部copy到项目跑一次就OK了!
Python时间标准化问题
Python中日期格式化是非常常见的操作,Python 中能用很多方式处理日期和时间,转换日期格式是一个常见的功能。
1.获取时间的基本方法
- 1.1 time.time()
time time() 函数返回当前时间的时间戳(1970纪 元后经过的浮点秒数)。通常来说,时间戳表示的是从 1970 年 1 月 1 日 00:00:00 开始按秒计算的偏移量。
import time timeStamp = time.time() # print(current_time) # 输出: 1614846609.368156
- 1.2 time.localtime()
time localtime() 函数类似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 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59)
3. 时间的常用操作
- 3.1 字符串时间转换为时间戳
t = "2021-03-04 16:30:10" #将其转换为时间数组 timeStruct = time.strptime(t, "%Y-%m-%d %H:%M:%S" ) #转换为时间戳: timeStamp = int (time.mktime(timeStruct)) # print (timeStamp) # 输出: 1614846610
- 3.2 时间戳转换为指定格式日期
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 #先获得时间数组格式的日期 threeDayAgo = (datetime.datetime.now() - datetime.timedelta(days=3)) #转换为时间戳: timeStamp = int(time.mktime(threeDayAgo.timetuple())) #转换为其他字符串格式: strTime = threeDayAgo.strftime( "%Y-%m-%d %H:%M:%S" ) # print (strTime) # 输出: 2021-03-01 16:30:10
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。