Springboot将cron表达式转成文字描述的时间

726 阅读1分钟
javaCopy code
import org.springframework.stereotype.Component;

import com.cronutils.descriptor.CronDescriptor;
import com.cronutils.model.Cron;
import com.cronutils.model.definition.CronDefinition;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.parser.CronParser;

import java.util.Locale;

@Component
public class CronExpressionParser {

    public String parseCronExpression(String cronExpression) {
        CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ);
        CronParser cronParser = new CronParser(cronDefinition);
        Cron cron = cronParser.parse(cronExpression);
        CronDescriptor descriptor = CronDescriptor.instance(Locale.CHINA);
        return descriptor.describe(cron);
    }
}

在上述示例中,CronDescriptor.instance(Locale.CHINA)将创建一个中文描述器对象,可以将Cron对象转换为中文文字描述时间。

如果您的应用程序需要支持多种语言,您可以根据不同的语言创建不同的CronDescriptor实例,然后在需要使用的时候选择对应的实例即可。例如,您可以将不同的CronDescriptor实例注入到Spring容器中,并使用@Qualifier注解指定要使用的实例。以下是示例代码:

javaCopy code
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import com.cronutils.descriptor.CronDescriptor;
import com.cronutils.model.Cron;
import com.cronutils.model.definition.CronDefinition;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.parser.CronParser;

import java.util.Locale;

@Component
public class CronExpressionParser {

    private final CronDescriptor englishDescriptor;
    private final CronDescriptor chineseDescriptor;

    public CronExpressionParser() {
        CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ);
        CronParser cronParser = new CronParser(cronDefinition);
        Cron cron = cronParser.parse("0 0/30 * * * ?");
        englishDescriptor = CronDescriptor.instance(Locale.US);
        chineseDescriptor = CronDescriptor.instance(Locale.CHINA);
    }

    public String parseCronExpression(String cronExpression, String language) {
        CronDescriptor descriptor;
        if ("zh".equalsIgnoreCase(language)) {
            descriptor = chineseDescriptor;
        } else {
            descriptor = englishDescriptor;
        }
        CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ);
        CronParser cronParser = new CronParser(cronDefinition);
        Cron cron = cronParser.parse(cronExpression);
        return descriptor.describe(cron);
    }
}

在上述示例中,CronDescriptor.instance(Locale.US)CronDescriptor.instance(Locale.CHINA)将分别创建英文和中文描述器实例。在parseCronExpression方法中,我们检查传入的language参数,如果是zh则选择中文描述器,否则选择英文描述器。这样,我们可以在不同的语言环境下使用不同的描述器实例来生成文字描述时间。