企业微信时间同步化
评论
收藏

企业微信时间同步化

经验分享
知意
2024-08-19 20:57·浏览量:530
知意
发布于 2024-08-19 20:57530浏览

一、背景

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

二、实现过程

此文章只实现到年月日同步,因此,可以区分情况为五种:昨天、08/08(月/日)、2023/04/02(年/月/日)、星期几、其他(今日时间)

主要难点在于星期几的推算,例如今天是星期三,如果企业微信显示是星期四,则是上周星期四。如果企业微信显示是星期二,则是本周星期二

2.1 星期几推算代码

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

如此可以推算出显示的星期几是在本周或者上周的年月日标准日期

而 月/日 与 年/月/日 的格式标准与其他区别在于反斜杠,因此可以以此作为分割点进行判断

2.2 整体实现代码

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

如此便可以实现企业微信中的各类日期转换为统一日期格式问题

三、实现结果展示

收藏2
全部评论1
最新
发布评论
评论