Java-获得与前一年相同的每周日期范围
我需要根据当前日期获取本周和上一年同一周的某些数据 例如,今天是2017年11月23日-周四。 我有本周的下一个日期范围:2017年11月20日(星期一)-2017年11月23日(星期四)Java-获得与前一年相同的每周日期范围,java,date,date-range,Java,Date,Date Range,我需要根据当前日期获取本周和上一年同一周的某些数据 例如,今天是2017年11月23日-周四。 我有本周的下一个日期范围:2017年11月20日(星期一)-2017年11月23日(星期四) 获取上一年(2016年11月21日(星期一)-2016年11月24日(星期四))的相应周日期范围的最佳方法是什么?您必须制作一份规范文件,业务方应予以确认 今天是2017年11月23日-周四。因此,本周是:2017年11月20日 (星期一)-2017年11月26日(星期日) 在上一年中,我们取今天的2017年
获取上一年(2016年11月21日(星期一)-2016年11月24日(星期四))的相应周日期范围的最佳方法是什么?您必须制作一份规范文件,业务方应予以确认 今天是2017年11月23日-周四。因此,本周是:2017年11月20日 (星期一)-2017年11月26日(星期日) 在上一年中,我们取今天的2017年11月23日,减去一年。。 这是2016年11月23日的星期三 我们获得的周数为:2016年11月21日(星期一)至2016年11月27日(星期日) A.不规则:2月29日变为前一天的28日 一年 B.我们只对结果的周一至周四感兴趣, 但是要尽一切努力,这样我们也可以在周六工作
然后考虑周数和周数。strong>备选方案
: 今天是2017年11月23日-周四。这是第47周的一周, 2017年的一周。(2017年1月1日将是第52周 2016). 2016年前一周的第47周收益率 如果没有第53周,53可能变成52 B.一月初 可以是前一周或前一年的 如您所见,不应该简单地实现,而应该记录这样的业务逻辑顺便说一句,新的java日期时间API非常棒。您必须制作一个规范文档,业务方应该确认这一点 今天是2017年11月23日-周四。因此,本周是:2017年11月20日 (星期一)-2017年11月26日(星期日) 在上一年中,我们取今天的2017年11月23日,减去一年。。 这是2016年11月23日的星期三 我们获得的周数为:2016年11月21日(星期一)至2016年11月27日(星期日) A.不规则:2月29日变为前一天的28日 一年 B.我们只对结果的周一至周四感兴趣, 但是要尽一切努力,这样我们也可以在周六工作
然后考虑周数和周数。strong>备选方案
: 今天是2017年11月23日-周四。这是第47周的一周, 2017年的一周。(2017年1月1日将是第52周 2016). 2016年前一周的第47周收益率 如果没有第53周,53可能变成52 B.一月初 可以是前一周或前一年的 如您所见,不应该简单地实现,而应该记录这样的业务逻辑顺便说一句,新的java日期-时间API非常棒。最难的部分是定义您想要的内容以及您想要的时区。后者是正确的,因为在撰写本文时,斯摩棱斯克是11月23日,但在世界其他地方已经是11月24日了,所以你需要做出决定 我这样理解您的问题,请检查是否正确:查找从本周初(星期一)到今天的日期范围。然后找出去年从周一到今天的一周中的同一天的范围,尽可能接近相同的日期。这意味着你总是想回到52周前。然后你会得到一天之后的日期(如果在闰年中跨越2月29日,则两天之后),这将永远是你能得到的最接近的日期 使用现代java日期和时间API
java.time
,代码很简单:
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
再次检查这是否是您想要的。最难的部分是定义您想要的内容以及您想要的时区。后者是正确的,因为在撰写本文时,斯摩棱斯克是11月23日,但在世界其他地方已经是11月24日了,所以你需要做出决定 我这样理解您的问题,请检查是否正确:查找从本周初(星期一)到今天的日期范围。然后找出去年从周一到今天的一周中的同一天的范围,尽可能接近相同的日期。这意味着你总是想回到52周前。然后你会得到一天之后的日期(如果在闰年中跨越2月29日,则两天之后),这将永远是你能得到的最接近的日期 使用现代java日期和时间API
java.time
,代码很简单:
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
再次检查这是否是您想要的。请定义您所说的同一周是什么意思,是财政周吗?是的,是财政周。我需要根据一周中的天数相对于当前日期来获取上一年的每周日期范围。我觉得您似乎总是想向后退52周。这样一来,去年的一周将推迟一天(如果闰年中跨越2月29日,则推迟两天),如果你想要一周中的同一天,这将是最接近的。这样行吗?当然,如果你从12月31日星期一返回,你将到达1月1日星期一,也就是说,你甚至不在上一年。我投票以“不清楚”结束,因为正如其他人评论的那样,你还没有定义你所说的周是什么意思。提示:。请定义您所说的“同一周”是什么意思,是财政周吗?是的,是财政周。我需要根据d获取上一年的每周日期范围