【发布时间】:2017-05-03 10:19:54
【问题描述】:
我正在尝试获取自 1970 年、1971 年、1972 年、1973 年等到 2017 年以来的年份列表,以及 1 月至 12 月的月份列表 在此之后根据月份和年份生成周数(基于周一至周五的工作日)。
如果一个月从星期四开始,即 2016 年 2 月 2 日
那么它应该返回 2-2-2016, 3-2-2016
假设一个用例是月末日是星期二,其日期是 2016 年 4 月 30 日
那么我应该得到 29-4-2016, 30-4-2016
到目前为止,我只能从输入日期获得同一周的最后一个工作日,代码如下:
String Date = "06-04-2012";
DateTimeFormatter f = DateTimeFormatter.ofPattern("YYYY-MM-DD");
LocalDate ld = LocalDate.parse(Date, f);
LocalDate nextOrSameFriday = ld.with(TemporalAdjusters
.nextOrSame(DayOfWeek.FRIDAY));
String output = nextOrSameFriday.toString();
//String output = ld.format( f );
if (nextOrSameFriday.getMonthValue() != ld.getMonthValue()) {
nextOrSameFriday = ld.with(TemporalAdjusters
.nextOrSame(DayOfWeek.THURSDAY));
if (nextOrSameFriday.getMonthValue() == ld.getMonthValue())
return nextOrSameFriday.toString();
else if (nextOrSameFriday.getMonthValue() != ld.getMonthValue()) {
nextOrSameFriday = ld.with(TemporalAdjusters
.nextOrSame(DayOfWeek.WEDNESDAY));
if (nextOrSameFriday.getMonthValue() == ld.getMonthValue())
return nextOrSameFriday.toString();
else if (nextOrSameFriday.getMonthValue() != ld.getMonthValue()) {
nextOrSameFriday = ld.with(TemporalAdjusters
.nextOrSame(DayOfWeek.TUESDAY));
if (nextOrSameFriday.getMonthValue() == ld.getMonthValue())
return nextOrSameFriday.toString();
else
return Date;
}
}
}
选择月份和年份后,我想做以下事情:
-
查找每月的第一天
-
查找 MONTH 的第一个星期五
-
检查是星期六还是星期日,在 DATE 中添加 1 或 2
-
在第一个星期五加上 2 天得到第 2 周的第一天。
-
增加 5 天以获得第二周星期五
-
同样持续到月底
【问题讨论】:
-
有点难以理解你想要做什么。你想得到纪元以来的年份吗?如果是这样,为什么?有像 Joda 甚至
Calendar这样的库,它们可能已经做了你想要的,不需要自己创建这些函数。那么,你能详细说明你想做什么吗? -
不,我想这样做...... 1970 , 1971, 1972, 1973 等到 2017 年以及 1 月至 12 月的几个月列表(我还是硬编码了这个)然后计算周
-
我解决了年表和月表问题。现在唯一剩下的就是计算周数了
-
天哪,对不起,虽然我解决了所有问题,但我很奇怪为什么我得到了这么多反对票,我在这里写的时候搞砸了日期。