根据输入查找每周日期范围
To find the weekly date range based on the input
我的 属性 文件输入如下,用于每周报告
数据滞后 - 10 天
运行 天 - 星期二。
要求基于日期延迟:我必须将日历向后移动 10 天。然后我想找到星期二(任何工作日都可以在参数中指定)。
由此我想获得一份每周报告。
当指定此配置时,例如今天 2021 年 5 月 11 日
5 月 11 日 - 10 天 = 2021 年 5 月 1 日。在此之后,根据 运行 日(例如星期一),我的日历应移至 4 月 26 日。
最后的结果会是
4月26日(星期一)至5月2日(星期日)
val format_w = new SimpleDateFormat("yyyy-MM-dd")
val cal_ins = Calendar.getInstance
cal_ins.add(Calendar.DATE, -datalaginterval)
val datlag_date = cal_ins.getTime()
logger.info("datalag date"+datlag_date)
cal_ins.add(Calendar.DATE, -7)
val startdate = cal_ins.getTime
val start_date = format_w.format(startdate)
println("start date-"+start_date)
// calculate sunday last week (moves cal 6 days fwd)
cal_ins.add(Calendar.DATE, 6)
val enddate = cal_ins.getTime
val end_date = format_w.format(enddate)
println("End date-"+end_date)
我正在使用 Java Calendar
class.
你的问题比较混乱。也许这会帮助您朝着正确的方向开始。
import java.time.LocalDate
import java.time.DayOfWeek
val lagDate: LocalDate = LocalDate.now() //today
.minusDays(9L) //less lag days
val nearestTues: LocalDate = //Tuesday closest to lag date
lagDate.minusDays(lagDate.getDayOfWeek().getValue() -
DayOfWeek.valueOf("TUESDAY").getValue())
val (tuesBefore
,tuesAfter) = if (nearestTues isAfter lagDate)
(nearestTues.minusDays(7L), nearestTues)
else
(nearestTues, nearestTues.plusDays(7L))
java.time
像其他人一样,我热烈建议您使用 java.time,现代的 Java 日期和时间 API,进行约会工作。我相信代码可以比其他答案中的代码简单一些。对不起我的 Java。我相信你会运行选择 Scala。
int lagDays = 10;
DayOfWeek runDay = DayOfWeek.TUESDAY;
LocalDate today = LocalDate.now(ZoneId.of("Africa/Ceuta"));
LocalDate start = today.minusDays(lagDays)
.with(TemporalAdjusters.previousOrSame(runDay));
LocalDate end = start.plusDays(6);
System.out.format("From %s through %s%n", start, end);
当我运行刚才的代码时,输出是:
From 2021-04-27 through 2021-05-03
如果你想使用JVM的默认时区,使用:
LocalDate today = LocalDate.now(ZoneId.systemDefault());
.with(TemporalAdjusters.previousOrSame(runDay))
的工作原理:如果 10 天前已经是星期二,那就是您得到的日期。否则,您将获得前一个星期二,即 10 天前的计算日期之前最近的星期二。在这个例子中,10 天前是 5 月 2 日星期日,所以我们得到的是 4 月 27 日星期二。
Link
Oracle tutorial: Date Time 解释如何使用 java.time。
我的 属性 文件输入如下,用于每周报告
数据滞后 - 10 天
运行 天 - 星期二。
要求基于日期延迟:我必须将日历向后移动 10 天。然后我想找到星期二(任何工作日都可以在参数中指定)。
由此我想获得一份每周报告。
当指定此配置时,例如今天 2021 年 5 月 11 日
5 月 11 日 - 10 天 = 2021 年 5 月 1 日。在此之后,根据 运行 日(例如星期一),我的日历应移至 4 月 26 日。
最后的结果会是
4月26日(星期一)至5月2日(星期日)
val format_w = new SimpleDateFormat("yyyy-MM-dd")
val cal_ins = Calendar.getInstance
cal_ins.add(Calendar.DATE, -datalaginterval)
val datlag_date = cal_ins.getTime()
logger.info("datalag date"+datlag_date)
cal_ins.add(Calendar.DATE, -7)
val startdate = cal_ins.getTime
val start_date = format_w.format(startdate)
println("start date-"+start_date)
// calculate sunday last week (moves cal 6 days fwd)
cal_ins.add(Calendar.DATE, 6)
val enddate = cal_ins.getTime
val end_date = format_w.format(enddate)
println("End date-"+end_date)
我正在使用 Java Calendar
class.
你的问题比较混乱。也许这会帮助您朝着正确的方向开始。
import java.time.LocalDate
import java.time.DayOfWeek
val lagDate: LocalDate = LocalDate.now() //today
.minusDays(9L) //less lag days
val nearestTues: LocalDate = //Tuesday closest to lag date
lagDate.minusDays(lagDate.getDayOfWeek().getValue() -
DayOfWeek.valueOf("TUESDAY").getValue())
val (tuesBefore
,tuesAfter) = if (nearestTues isAfter lagDate)
(nearestTues.minusDays(7L), nearestTues)
else
(nearestTues, nearestTues.plusDays(7L))
java.time
像其他人一样,我热烈建议您使用 java.time,现代的 Java 日期和时间 API,进行约会工作。我相信代码可以比其他答案中的代码简单一些。对不起我的 Java。我相信你会运行选择 Scala。
int lagDays = 10;
DayOfWeek runDay = DayOfWeek.TUESDAY;
LocalDate today = LocalDate.now(ZoneId.of("Africa/Ceuta"));
LocalDate start = today.minusDays(lagDays)
.with(TemporalAdjusters.previousOrSame(runDay));
LocalDate end = start.plusDays(6);
System.out.format("From %s through %s%n", start, end);
当我运行刚才的代码时,输出是:
From 2021-04-27 through 2021-05-03
如果你想使用JVM的默认时区,使用:
LocalDate today = LocalDate.now(ZoneId.systemDefault());
.with(TemporalAdjusters.previousOrSame(runDay))
的工作原理:如果 10 天前已经是星期二,那就是您得到的日期。否则,您将获得前一个星期二,即 10 天前的计算日期之前最近的星期二。在这个例子中,10 天前是 5 月 2 日星期日,所以我们得到的是 4 月 27 日星期二。
Link
Oracle tutorial: Date Time 解释如何使用 java.time。