企业微信日期因为有分非常多种格式,有多少分钟前,有时分、星期几、月日、年月日;日期非常杂乱,如此进行日期查询或者日期合计将变得非常复杂繁琐;这篇文章专门应对此等问题进行日期统一格式化;(此文章算是抛砖引玉,希望大家有更多更好思路提供嘞)

此文章只实现到年月日同步,因此,可以区分情况为五种:昨天、08/08(月/日)、2023/04/02(年/月/日)、星期几、其他(今日时间)
主要难点在于星期几的推算,例如今天是星期三,如果企业微信显示是星期四,则是上周星期四。如果企业微信显示是星期二,则是本周星期二
from datetime import datetime, timedelta
def get_weekday_date(weekday_name):
# 获取当前日期
today = datetime.now()
# 将输入的星期几映射到整数(星期一到星期日对应0到6)
weekday_map = {
'星期一': 0,
'星期二': 1,
'星期三': 2,
'星期四': 3,
'星期五': 4,
'星期六': 5,
'星期日': 6
}
# 获取目标星期几的索引
target_weekday_index = weekday_map[weekday_name]
# 计算从当前星期几到目标星期几需要移动的天数
# 如果今天是目标星期几或更晚,就移动到上一个周期的目标星期几
# 否则,就移动到当前周期的目标星期几
days_to_go = target_weekday_index - today.weekday()
if days_to_go > 0:
days_to_go -= 7
# 构造目标日期
target_date = today + timedelta(days=days_to_go)
# 格式化日期
formatted_date = target_date.strftime('%Y-%m-%d')
return formatted_date如此可以推算出显示的星期几是在本周或者上周的年月日标准日期
而 月/日 与 年/月/日 的格式标准与其他区别在于反斜杠,因此可以以此作为分割点进行判断
from datetime import datetime, timedelta
text_content = "星期四"
data_time = get_date(text_content)
def get_date(text_content):
days_text = "" #初始化格式日期
text_list = text_content.split("/") #作为月日与年月日的区分点
today = datetime.now() #获取当前日期
# 如果为昨天,则当天减一
if text_content == "昨天":
yesterday = today - timedelta(days=1)
days_text = yesterday.strftime("%Y-%m-%d")
# 如果text_list等于2 则说明格式为 月/日 ;获取当前年份,进行格式转换即可
elif len(text_list) == 2:
year = today.year
text_content = text_content.replace('/','-')
days_text = str(year)+"-"+text_content
# 如果text_list等于3 则说明格式为 年/月/日;直接进行格式转换即可
elif len(text_list) == 3:
days_text = text_content.replace('/','-')
# 如果格式内容中包含星期,则说明是星期几的计算,直接调用上述函数
elif "星期" in text_content:
days_text = get_weekday_date(text_content)
# 其余情况皆为本日
else:
days_text = today.strftime("%Y-%m-%d")
return days_text
def get_weekday_date(weekday_name):
# 获取当前日期
today = datetime.now()
# 将输入的星期几映射到整数(星期一到星期日对应0到6)
weekday_map = {
'星期一': 0,
'星期二': 1,
'星期三': 2,
'星期四': 3,
'星期五': 4,
'星期六': 5,
'星期日': 6
}
# 获取目标星期几的索引
target_weekday_index = weekday_map[weekday_name]
# 计算从当前星期几到目标星期几需要移动的天数
# 如果今天是目标星期几或更晚,就移动到上一个周期的目标星期几
# 否则,就移动到当前周期的目标星期几
days_to_go = target_weekday_index - today.weekday()
if days_to_go > 0:
days_to_go -= 7
# 构造目标日期
target_date = today + timedelta(days=days_to_go)
# 格式化日期
formatted_date = target_date.strftime('%Y-%m-%d')
return formatted_date如此便可以实现企业微信中的各类日期转换为统一日期格式问题
