首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -获得前一年相同的每周日期范围

问Java -获得前一年相同的每周日期范围
EN

Stack Overflow用户
提问于 2017-11-23 13:39:00
回答 2查看 429关注 0票数 0

我需要根据当前日期获取当前周和前一年的同一周的某些数据。

例如,今天是2017年11月23日-周四。我有本周的下一个日期范围:2017年11月20日(星期一)至2017年11月23日(星期四)。

获得前一年(2016年11月21日(星期一)至2016年11月24日(星期四))相应的每周日期范围的最佳方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-23 13:58:18

您必须创建一个规范文档,业务端应该确认该文档。

今天是2017年11月23日至周四。因此,本周是:2017年11月20日(星期一)-2017年11月26日(星期日)。 在前一年,我们今天取2017年11月23日,减去一年。这是2016年11月23日星期三。 我们将获得2016年11月21日(星期一)至2016年11月27日(星期日)这一周。 违规:二月二十九日成为前一年的二十八号。 我们只对结果的星期一到星期四感兴趣,但是要做所有的事情,所以我们也可以在星期六工作。

然后考虑周数和周数。替代

今天是2017年11月23日至周四。这是第47周,2017年的第一周。(2017年1月1日至2016年第52周)。2016年前一周47周的收益。 如果没有第53周,A. 53有可能变成52岁。 1月初可以是前一周的一年。

正如您所看到的,我们不应该简单地实现,而是记录这样的业务逻辑。

顺便说一下,新的java日期时间API是很棒的。

票数 2
EN

Stack Overflow用户

发布于 2017-11-23 16:32:18

最困难的部分是定义你想要的东西以及你想要它的时区。后者是真的,因为在写作的时候是11月23日在斯摩棱斯克,但在世界上的其他地方已经是11月24日,所以你需要决定。

我这样理解你的问题,请检查是否正确:找出从本周初(星期一)到今天的日期范围。然后找到一个范围,去年也从星期一到同一天的一周与今天,尽可能接近相同的日期。这意味着你将永远想去52周前。然后你会得到日期是一天后(两天后,如果跨越2月29日在闰年),这将永远是你所能得到的。

使用java.time (现代Java和time ),代码很简单:

代码语言:javascript
复制
    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);

刚才运行的这个打印:

代码语言:javascript
复制
This year: 2017-11-20 - 2017-11-23
Last year: 2016-11-21 - 2016-11-24

如果这不是你想要的时区,请用你想要的时区代替欧洲/莫斯科。

如果您也想打印一周中的一天,请使用DateTimeFormatter。

代码语言:javascript
复制
    DateTimeFormatter dateFormatter = DateTimeFormatter
            .ofPattern("d/M/uuuu (EEEE)", Locale.forLanguageTag("ru"));
    System.out.println("This year: " + firstDayOfWeek.format(dateFormatter) + " - "
            + today.format(dateFormatter));

这些指纹:

代码语言:javascript
复制
This year: 20/11/2017 (понедельник) - 23/11/2017 (четверг)

如果你在2018年12月31日运行代码,你将无法追溯到2017年:

代码语言:javascript
复制
This year: 2018-12-31 - 2018-12-31
Last year: 2018-01-01 - 2018-01-01

再说一遍,看看这是不是你想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47456891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档