我需要根据当前日期获取当前周和上一年同一周的某些数据。
例如,今天是 23/11/2017 - 星期四。我有本周的下一个日期范围:20/11/2017(星期一) - 23/11/2017(星期四)。
获得上一年(21/11/2016(星期一) - 24/11/2016(星期四))的相应每周日期范围的最佳方法是什么?
困难的部分是定义你想要什么以及你想要它在哪个时区。后者是真的,因为在撰写本文时,斯摩棱斯克是 11 月 23 日,但在世界其他地方已经是 11 月 24 日,所以你需要决定。
我是这样理解您的问题,请检查是否正确:查找从本周开始(星期一)到今天的日期范围。然后从去年的星期一到今天的同一天找到一个范围,尽可能接近相同的日期。这意味着您总是想回到 52 周前。然后您将获得一天后的日期(如果在闰年中跨越 2 月 29 日,则为两天后),这将始终尽可能接近。
使用java.time
现代 Java 日期和时间 API,代码很简单:
LocalDate today = LocalDate.now(ZoneId.of("Europe/Moscow"));
LocalDate firstDayOfWeek
= today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
System.out.println("This year: " + firstDayOfWeek + " - " + today);
LocalDate firstDayLastYear = firstDayOfWeek.minusWeeks(52);
LocalDate correspondingDayLastYear = today.minusWeeks(52);
System.out.println("Last year: " + firstDayLastYear + " - "
+ correspondingDayLastYear);
刚才运行这个打印:
This year: 2017-11-20 - 2017-11-23
Last year: 2016-11-21 - 2016-11-24
如果这不是您想要的时区,请替换您想要的时区而不是欧洲/莫斯科。
如果您还想打印星期几,请使用DateTimeFormatter
.
DateTimeFormatter dateFormatter = DateTimeFormatter
.ofPattern("d/M/uuuu (EEEE)", Locale.forLanguageTag("ru"));
System.out.println("This year: " + firstDayOfWeek.format(dateFormatter) + " - "
+ today.format(dateFormatter));
这打印:
This year: 20/11/2017 (понедельник) - 23/11/2017 (четверг)
如果您在 2018 年 12 月 31 日运行代码,您将无法回到 2017 年:
This year: 2018-12-31 - 2018-12-31
Last year: 2018-01-01 - 2018-01-01
再次,检查这是否是您想要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句