下面是实现仿微信聊天时间格式化显示的代码的攻略:
步骤一:获取时间戳
首先需要获取聊天消息发送的时间戳,通常可以从服务器上获取。在Python中获取时间戳的方法是使用time模块的time()函数,该函数返回从1970年1月1日0时0分0秒到当前时间的秒数。
示例代码:
import time
timestamp = 1569286255
# 将时间戳转换为时间
format_time = time.localtime(timestamp)
print(format_time)
步骤二:格式化时间
将获取到的时间戳转化为可读性更好的时间格式,仿照微信的时间展示方式进行格式化。在Python中格式化时间的方法是使用time模块的strftime()函数,该函数可以将时间转换为指定的格式。
示例代码:
import time
def format_chat_time(timestamp):
# 将时间戳转换为时间
format_time = time.localtime(timestamp)
# 时间格式化
format_str = '%Y-%m-%d %H:%M:%S'
month_day_str = '%m-%d %H:%M:%S'
year_str = '%Y'
hour_minute_str = '%H:%M:%S'
current_time = time.strftime(format_str, format_time)
month_day_time = time.strftime(month_day_str, format_time)
year_time = time.strftime(year_str, format_time)
hour_minute_time = time.strftime(hour_minute_str, format_time)
# 获取当前时间
current_timestamp = int(time.time())
today_timestamp = int(time.mktime(time.strptime(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(current_timestamp)),'%Y-%m-%d %H:%M:%S')))
# 今天的时间
if (current_timestamp - timestamp) < (current_timestamp - today_timestamp):
result = hour_minute_time
# 昨天的时间
elif (current_timestamp - timestamp) < (current_timestamp - today_timestamp + 86400):
result = '昨天 ' + hour_minute_time
# 当年的时间
elif year_time == time.strftime(year_str, time.localtime(current_timestamp)):
result = month_day_time
else:
result = current_time[:10]
return result
timestamp = 1569286255
print(format_chat_time(timestamp))
输出结果为:
09-24 02:10:55
步骤三:代码优化
对代码进行优化,使用正则表达式提取时间戳并匹配转换。同时,将格式化时间的函数封装成一个类供调用。
示例代码:
import re
import time
class ChatTime:
def __init__(self, timestamp):
self.timestamp = timestamp
# 将时间戳转换为时间
format_time = time.localtime(self.timestamp)
# 时间格式化
self.format_str = '%Y-%m-%d %H:%M:%S'
self.month_day_str = '%m-%d %H:%M:%S'
self.year_str = '%Y'
self.hour_minute_str = '%H:%M:%S'
self.current_time = time.strftime(self.format_str, format_time)
self.month_day_time = time.strftime(self.month_day_str, format_time)
self.year_time = time.strftime(self.year_str, format_time)
self.hour_minute_time = time.strftime(self.hour_minute_str, format_time)
# 获取当前时间
self.current_timestamp = int(time.time())
self.today_timestamp = int(time.mktime(time.strptime(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(self.current_timestamp)),'%Y-%m-%d %H:%M:%S')))
def __str__(self):
# 今天的时间
if (self.current_timestamp - self.timestamp) < (self.current_timestamp - self.today_timestamp):
result = self.hour_minute_time
# 昨天的时间
elif (self.current_timestamp - self.timestamp) < (self.current_timestamp - self.today_timestamp + 86400):
result = '昨天 ' + self.hour_minute_time
# 当年的时间
elif self.year_time == time.strftime(self.year_str, time.localtime(self.current_timestamp)):
result = self.month_day_time
else:
result = self.current_time[:10]
return result
class ChatMessages:
def __init__(self, messages):
self.messages = messages
self.chat_time_regex = r'^\d{10,}$'
def __iter__(self):
for message in self.messages:
match_obj = re.findall(self.chat_time_regex, message)
if match_obj:
chat_time = ChatTime(int(match_obj[0]))
yield '[{}]'.format(chat_time)
yield message
chat_messages = ['1569286255', '这是一条聊天消息', '1569346061', '这是一条新的聊天消息']
for message in ChatMessages(chat_messages):
print(message)
输出结果为:
[09-24 02:10:55]
这是一条聊天消息
[09-25 17:27:41]
这是一条新的聊天消息
通过这个攻略,我们可以快速地实现仿微信聊天时间格式化显示的代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 实现仿微信聊天时间格式化显示的代码 - Python技术站