Java 通过减去动态配置的时间单位获取日期的有效方法

Java 通过减去动态配置的时间单位获取日期的有效方法,java,Java,我安排了一些作业,这些作业读取一个“合格间隔”,以便根据可配置参数扫描足够旧的数据。“旧”标准被提议作为一个值和一个Java7日历单元。例如: job1.cron=0 10 6 * * * job1.eligibleinterval.value=5 job1.eligibleinterval.unit=Calendar.DAY # Job 1's Eligible Data is 5 days old job2.cron=0 10 6 * * * job2.eligibleinterval

我安排了一些作业,这些作业读取一个“合格间隔”,以便根据可配置参数扫描足够旧的数据。“旧”标准被提议作为一个值和一个Java7日历单元。例如:

job1.cron=0 10 6 * * *
job1.eligibleinterval.value=5
job1.eligibleinterval.unit=Calendar.DAY   # Job 1's Eligible Data is 5 days old

job2.cron=0 10 6 * * *
job2.eligibleinterval.value=1
job2.eligibleinterval.unit=Calendar.MONTH   # Job 2's Eligible Data is 1 month old
理想情况下,支持的单位应包括
分钟、小时、天、月、年
(可能不是

在代码中,有必要按如下方式计算截止日期(这是硬编码的
日期
版本):


我的问题是,是否有一个好的设计解决方案(可能在Java 8中)来减去Java 8中动态提供的时间单位,以避免不同单位的
If/Else
决策树?是否有比
minusDays
minusmonds
更优雅的解决方案?(顺便说一句,
minutes
minutehours
没有快速方法)

您应该能够使用需要
TemporalUnit
:


此解决方案要求您的配置文件声明的时间单位与枚举中的常量一致。

谢谢,这里只需输入一个错误:
ChronoUnit
,带有“H”
// This hard-codes DAYS
LocalDate localDate = LocalDate.now().minusDays(
   Long.parseLong(poperties.getProperty("job1.eligibleinterval.value")));
long amount = Long.parseLong(properties.getProperty("job1.eligibleinterval.value"));
TemporalUnit unit = ChronoUnit.valueOf(properties.getProperty("job1.eligibleinterval.unit"));

LocalDate localDate = LocalDate.now().minus(amount, unit);