Sam*_*uel 13
快速两个衬垫:
Integer weeksOfYear = Calendar.getInstance().getActualMaximum(Calendar.WEEK_OF_YEAR);
Run Code Online (Sandbox Code Playgroud)
Man*_*ula 12
根据维基百科有关ISO周日期格式的文章,您可以使用以下代码进行计算.
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2015);
cal.set(Calendar.MONTH, Calendar.DECEMBER);
cal.set(Calendar.DAY_OF_MONTH, 31);
int ordinalDay = cal.get(Calendar.DAY_OF_YEAR);
int weekDay = cal.get(Calendar.DAY_OF_WEEK) - 1; // Sunday = 0
int numberOfWeeks = (ordinalDay - weekDay + 10) / 7;
System.out.println(numberOfWeeks);
Run Code Online (Sandbox Code Playgroud)
COD*_*BOY 10
平均而言,一年每5.6年有53周.
接下来的71年,在400年的周期中(当年增加2000年)有53周.未列出的年份有52周.
004,009,015,020,026,032,037,043,048,054,060,065,071,076,082,088,093,099,105,111,116,122,128,133,139, 144,150,156,161,167,172,178,184,189,195,201,207,212,218,224,229,235,240,246,252,257,263,268,274,280, 285,291,296,303,308,314,320,325,331,336,342,348,353,359,364,370,376,381,387,392,398.
你可以使用上面的信息相应地返回52或53 :)
我想通过以下准备运行的代码来介绍Java 8中新的Date API的用法:
private static long getNumberOfWeeksInYear(LocalDate date) {
LocalDate middleOfYear = date.withDayOfMonth(1).withMonth(6);
return middleOfYear.range(WeekFields.ISO.weekOfWeekBasedYear()).getMaximum();
}
public static void main(String[] args) {
for (int year = 2000; year < 2400; year++) {
long numberOfWeeks = getNumberOfWeeksInYear(LocalDate.of(year, 1, 1));
if (numberOfWeeks != 52) {
System.out.println(year + " has " + numberOfWeeks + " weeks");
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出为:
2004年有53周
2009年有53周
2015年有53周
2020年有53周
2026年有53周
2032年有53周
...
等等...
该date.withDayOfMonth(1).withMonth(6);诀窍是因为如果忽略了此结果稍有不同的输出LocalDate.of(year, 1, 1)传递:
2004年有53周
2005年有53周
...
我仍然对Java 8日期API还是陌生的,但是我可以肯定的是,此行为是因为2005-01-01是2014年第53周的一部分。这使得date.range(WeekFields.ISO.weekOfWeekBasedYear()).getMaximum()返回基于2014年的周的周数。
| 归档时间: |
|
| 查看次数: |
19892 次 |
| 最近记录: |