我试图弄清楚如何确定特定的星期一是给定月份的第一个、第二个、第三个还是第四个星期一。我已经弄清楚了如何使用LocalDate类获取下一个星期一和月中的一周。
LocalDate now = LocalDate.of(2018, 2, 1);
LocalDate nextMonday = now.with(next(DayOfWeek.MONDAY));
WeekFields weekFields = WeekFields.of(Locale.getDefault());
int week = nextMonday.get(weekFields.weekOfMonth());
在上面的例子中,代码获取下一个星期一及其所在的星期。星期是二月的第二周,但那个星期一不是第二个星期一,而是第一个星期一。如果您有任何帮助,我们将不胜感激。
你可以反复尝试从日期中减去一周,直到月份发生变化。然后,你这样做的次数将是原始日期的“本月的第X天”。
编辑:一些代码。
LocalDate now = LocalDate.of(2018, 2, 1);
int i = 0;
Month originalMonth = now.getMonth();
while (now.getMonth() == originalMonth) { // its an enum, you can do this
now = now.plusWeeks(-1);
i++;
}
System.out.println(i); // prints 1
编辑:你应该用Ole V.V的答案(ChronoField.ALIGNED_WEEK_OF u MONTH
)代替这个答案。
你可以算出一个月的哪一天,除以7,再加上1:
LocalDate nextMonday = now.with(next(DayOfWeek.MONDAY));
int weekNo = ((nextMonday.getDayOfMonth()-1) / 7) +1;
例如,以下代码:
LocalDate now = LocalDate.of(2018, 2, 1);
for(int i = 0; i < 10; i++) {
now = now.with(next(DayOfWeek.MONDAY));
int weekNo = ((now.getDayOfMonth()-1) / 7) +1;
System.out.println("Date : " + now + " == " + weekNo);
}
打印出以下内容,这是我相信你想要的...
Date : 2018-02-05 == 1
Date : 2018-02-12 == 2
Date : 2018-02-19 == 3
Date : 2018-02-26 == 4
Date : 2018-03-05 == 1
Date : 2018-03-12 == 2
Date : 2018-03-19 == 3
Date : 2018-03-26 == 4
Date : 2018-04-02 == 1
Date : 2018-04-09 == 2
你不应该用你自己的算法来计算。使用内置功能:
int week = nextMonday.get(ChronoField.ALIGNED_WEEK_OF_MONTH);
使用代码中的日期,这会产生:
1
这意味着您获得的星期一(2月5日)是该月的第一个星期一。此外,您不需要任何WeekFields
,因为无论哪一天是一周的第一天,或者一年中的星期是如何编号的,每月的第一个星期一都是该月的第一个星期一。
日期算法通常很复杂,很容易出错。这也意味着,即使你最终计算正确,读者也很难说服自己你的代码是正确的。因此,最好使用我们信任要测试的内置功能,它使用解释性名称,而不是像1和7这样的数字。
您可能会惊讶地发现,要使用的字段名为ALIGNED\u WEEK\u OF\u MONTH
。将对齐的周视为从一个月的第一天开始的一周,无论一周中的哪一天,以及紧随其后的几周。2018年2月,第一周从2月1日星期四到2月7日星期三。接下来的几周从2月8日、2月15日和2月22日的周四开始。显然,一个月的第一个星期一在对齐的第一周,第二个星期一在对齐的第二周,等等。因此,使用对齐的\u week\u of \u month
。
问题内容: 我想获取特定月份/年份中第一个星期一的日期。 我有的: 我基本上有两个int变量,一个代表年份,一个代表月份。 我想要的是: 我想知道本月的第一个星期一,最好是一个int或Integer值。 例如: 我有2014年和1月(1月),这个月的第一个星期一是6号,所以我想返回6。 问题: 我以为可以做到这一点,但是在设置日历(仅提供年和月)时已经遇到了麻烦。此外,我不确定如何使用返回实际的月
我想知道特定月份/年份的第一个星期一的日期。 我所拥有的: 我基本上有两个int变量,一个代表年份,一个代表月份。 我想要的是: 我想知道这个月的第一个星期一,最好是整数或整数值。 例如: 我有2014年和1月,这个月的第一个星期一是6号,所以我想返回6号。 问题: 我原以为我可以用做到这一点,但我在设置日历时遇到了问题,因为只有年份和月份可用。此外,我不知道如何使用返回月份/年份的第一个星期一。
我有几十个积压的请求在处理中,比如 我已经有了一个每天都在运行的函数,我只需要将:位附加到end。 考虑公历和时区的细微差别,我花的时间越少,我的生活就越好。 有人知道简化这种计算的Java库吗?没有xml配置或框架或任何东西。只有一个。Jar和一个文档化的、可读的API将是完美的。 任何帮助都将不胜感激。
问题内容: 我正在尝试编写这样的日历功能 是整数(1、2、3 …),$ day是一天(Sun,Mon,…)或数字,以较容易的一个为准。方向有些混乱,因为它进行了不同的计算。 举个例子 它使用默认值,并获得5月的第一个星期日,即2009-05-03。如果我们打电话 ,它将返回5月的第二个最后一个星期日,即2009-05-24。 问题答案: 也许可以使其更快。。。 代码非常有趣。 请注意,前进1表示反
我正在尝试提出一个CRON表达式,它允许我在一个月内的每个星期一运行一个石英触发器,第一个除外。 参考文献: http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron
第二课: 画第一个三角形 这将又是一篇长教程。 用OpenGL 3实现复杂的东西很方便;为此付出的代价是,画一个简单的三角形变得比较麻烦。 不要忘了,定期复制粘贴,跑一下代码。 如果程序启动时崩溃了,很可能是你从错误的目录下运行了它。请仔细地阅读第一课中讲到的如何配置Visual Studio! 顶点数组对象(VAO) 你需要创建一个顶点数组对象,并将它设为当前对象(细节暂不深入): GLuint