python把cron表达式翻译成中文

参考java版本:Cron转中文
本文把java版本改写为python版本

代码如下


CRON_TIME_CN = ["秒", "分", "点", "天", "月", "周", "年"]
HOURS = 24
TIMESCALE = 60


def translate_cron_to_chinese(cronExp, cronTimeArr):
    tmpCorns = cronExp.split()
    sBuffer = ""
    if len(tmpCorns) in [6, 7]:
        if len(tmpCorns) == 7:
            # 解析年 Year
            year = tmpCorns[6]
            if year not in ["*", "?", "?"]:
                sBuffer = sBuffer + year + cronTimeArr[6]
        # 解析月 Month 主要解析
        months = tmpCorns[4]
        if months not in ["*", "?", "?"]:
            if "/" in months:
                sBuffer = sBuffer + "从" + months.split("/")[0] + "号开始,每" + months.split("/")[1] + cronTimeArr[4]
            else:
                if "-" in sBuffer:
                    sBuffer = sBuffer + "每年"
                sBuffer = sBuffer + months + cronTimeArr[4]
        # 解析周 DayofWeek 主要解析 , - 1~7/L 1L~7L
        dayofWeek = tmpCorns[5]
        if dayofWeek not in ["*", "?", "?"]:
            if "," in dayofWeek:
                sBuffer = sBuffer + "每周的第" + dayofWeek + cronTimeArr[3]
            elif "L" in dayofWeek and len(dayofWeek) > 1:
                weekNum = dayofWeek.split("L")[0]
                weekName = judgeWeek(weekNum)
                sBuffer = sBuffer + "每月的最后一周的" + weekName
            elif "-" in dayofWeek:
                splitWeek = dayofWeek.split("-")
                weekOne = judgeWeek(splitWeek[0])
                weekTwo = judgeWeek(splitWeek[1])
                sBuffer = sBuffer + "每周的" + weekOne + "到" + weekTwo
            else:
                if "L" == dayofWeek:
                    dayofWeek = "7"
                sBuffer = sBuffer + "每周的" + judgeWeek(dayofWeek)
        #  解析日 days -- DayofMonth 需要解析的 / # L W
        #  * “6#3”表示本月第三周的星期五(6表示星期五,3表示第三周);
        #  * “2#1”表示本月第一周的星期一;
        #  * “4#5”表示第五周的星期三。
        days = tmpCorns[3]
        if days not in ["*", "?", "?"]:
            if "/" in days:
                sBuffer = sBuffer + "每周从第" + days.split("/")[0] + "天开始,每" + days.split("/")[1] + cronTimeArr[3]
            elif "L" == days:
                sBuffer = sBuffer + "每月最后一天"
            elif "W" in days:
                daynum = days.replace("W", "")
                sBuffer = sBuffer + "每月离" + daynum + "号最近的那个工作日"
            elif "#" in days:
                splitDays = days.split("#")
                weekNum = splitDays[0]
                weekOfMonth = splitDays[1]
                weekName = judgeWeek(weekNum)
                sBuffer = sBuffer + "每月第" + weekOfMonth + cronTimeArr[5] + weekName
            else:
                sBuffer = sBuffer + "每月" + days + "号"
        else:
            if (len(sBuffer) == 0 or len(tmpCorns) == 7) and "星期" not in sBuffer:
                sBuffer += ("每" + cronTimeArr[3])
        # 解析时 Hours 主要解析 /
        hours = tmpCorns[2]
        if "*" != hours:
            if "/" in hours:
                sBuffer = sBuffer + append_gap_info(hours, HOURS, 2)
            else:
                if len(sBuffer) == 0:
                    sBuffer = sBuffer + "每天" + hours + cronTimeArr[2]
                else:
                    sBuffer = sBuffer + hours + cronTimeArr[2]
        # 解析分 Minutes 主要解析 /
        minutes = tmpCorns[1]
        if "*" != minutes:
            if "/" in minutes:
                sBuffer = sBuffer + append_gap_info(minutes, TIMESCALE, 1)
            elif minutes == "0":
                pass
            elif "-" in minutes:
                splitMinute = minutes.split("-")
                sBuffer = sBuffer + splitMinute[0] + cronTimeArr[1] + "到" + splitMinute[1] + cronTimeArr[1] + "每分钟"
            else:
                sBuffer = sBuffer + minutes + cronTimeArr[1]
        # 解析秒 Seconds 主要解析 /
        seconds = tmpCorns[0]
        if "*" != seconds:
            if "/" in seconds:
                sBuffer = sBuffer + append_gap_info(seconds, TIMESCALE, 0)
            elif "0" != seconds:
                sBuffer = sBuffer + seconds + cronTimeArr[0]
        if len(sBuffer) > 0:
            sBuffer += "执行"
        else:
            sBuffer += "表达式中文转换异常"
    else:
        sBuffer += "表达式中文转换异常"
    return sBuffer


def judgeWeek(weekNum):
    data = {
        "1": "星期天",
        "2": "星期一",
        "3": "星期二",
        "4": "星期三",
        "5": "星期四",
        "6": "星期五",
        "7": "星期六",
        "SUN": "星期天",
        "MON": "星期一",
        "TUE": "星期二",
        "WED": "星期三",
        "THU": "星期四",
        "FRI": "星期五",
        "SAT": "星期六",
    }
    return data[weekNum]


def append_gap_info(time, rangeNum, index):
    sBufferTemp = ""
    splitTime = time.split("/")
    startNum = splitTime[0]
    gapNum = splitTime[1]
    endNum = rangeNum + int(startNum) - int(gapNum)
    endStr = str(endNum)
    timeUnit = CRON_TIME_CN[index]
    splitTimeUnit = CRON_TIME_CN[index]
    if index == 1:
        splitTimeUnit = "分钟"
    elif index == 2:
        splitTimeUnit = "小时"
    sBufferTemp = sBufferTemp + "从" + startNum + timeUnit + "开始到" + endStr + timeUnit + "范围内,每隔" + gapNum + splitTimeUnit
    return sBufferTemp


if __name__ == '__main__':

    # 测试示例
    cron_expression = "0 0 1 15W * ?"
    chinese_translation = translate_cron_to_chinese(cron_expression, CRON_TIME_CN)
    print(chinese_translation)



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值