我有几个事件的日期,以毫秒 [1] 表示,我想知道哪些事件在当前周和当月,但我无法弄清楚如何获得第一天(日/月/年) )运行周并将其转换为毫秒,同一个月的第一天.
[1]Since January 1, 1970, 00:00:00 GMT
Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,其中要求将日期计算为给定月份的最后一个星期五.我想我有一个只使用标准Java的解决方案,但我想知道是否有人知道更简洁或更有效的东西.以下是我今年测试的内容:
for (int month = 0; month < 13; month++) {
GregorianCalendar d = new GregorianCalendar();
d.set(d.MONTH, month);
System.out.println("Last Week of Month in " + d.getDisplayName(d.MONTH, Calendar.LONG, Locale.ENGLISH) + ": " + d.getLeastMaximum(d.WEEK_OF_MONTH));
d.set(d.DAY_OF_WEEK, d.FRIDAY);
d.set(d.WEEK_OF_MONTH, d.getActualMaximum(d.WEEK_OF_MONTH));
while (d.get(d.MONTH) > month || d.get(d.MONTH) < month) {
d.add(d.WEEK_OF_MONTH, -1);
}
Date dt = d.getTime();
System.out.println("Last Friday of Last Week in " + d.getDisplayName(d.MONTH, Calendar.LONG, Locale.ENGLISH) + ": " + dt.toString());
}
Run Code Online (Sandbox Code Playgroud) 灵感来自以下帖子
我需要一个函数来返回该月中给定日期的序数位置,例如:
01/01/1970 = 1 因为这是1970年1月的第一个星期四
02/01/1970 = 1 因为这是1970年1月的第一个星期五
1970年1月19日 = 3 因为这是1970年1月的第三个星期一
1970年1月31日 = 5 因为这是1970年1月的第五个星期六
我试过了什么? - 没什么......我甚至不知道从哪里开始; Java 8日期/时间API对我来说是一个新手.
理想情况下,我想要一个具有此签名的函数:
public int getOrdinalPosition(TemporalAccessor temporal) {
...
}
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何确定特定星期一是某个月的第一个,第二个,第三个还是第四个星期一.我已经弄清楚如何获得使用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());
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,代码获取下一个星期一及其所在的星期.星期是2月的第二周,但是星期一不是第二个星期一,它是第一个星期一.任何有关这方面的帮助将不胜感激.