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

标签 java

我已经安排了作业,根据可配置的参数读取“资格间隔”来扫描足够旧的数据。 “旧”标准被建议为值和 Java 7 日历单元。示例:

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

理想情况下,支持的单位应包括分钟、小时、天、月、年(可能不是)。

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

// This hard-codes DAYS
LocalDate localDate = LocalDate.now().minusDays(
   Long.parseLong(poperties.getProperty("job1.eligibleinterval.value")));

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

最佳答案

您应该能够使用 LocalDate.minus() 的重载需要一个TemporalUnit :

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);

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

关于java - 通过减去动态配置的时间单位来获取日期的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54809820/

相关文章:

c# - 在 c# .Net 4 中替代 LoadingCache (guava)

java - 来自无状态 session bean 的 FileIO

java - 在小程序中序列化对象

java - 无需身份验证的Spring安全授权

java - 为什么这个JAVA代码无法解析构造函数?

java - 是否可以在 JNLP 文件的 j2se 标记中指定 java 的多个版本?

带有 GSON 的 Java JSON

java - 我如何修复 jboss : Failed to recover cluster state after the current node became the coordinator 中的此错误

java - 如何在不使用 for 循环的情况下使用现有列表的成员变量创建 java 列表?

java - 如何修改AlertDialog(Android)?