我知道可以使用给定日期来获得“一年的一周”,但是我如何获得相应的年份?
我知道,年度的定义取决于
Calendar.WEEK_OF_YEAR
。而且我对DIN 1355-1 /ISO8601 /德国解决方案
(但我不想使其成为解决方案)。 可能会遇到1月1日属于: 新年的第一周(1):例如,2015-01-01在2015年第一年 前一年的最后一周(53):例如,2016-01-01是在2015年第53年的一周我的问题是今年如何获得?*
Locale
Date date =
Calender calendar = new GregorianCalendar(Locale.GERMAN)
calendar.setTime(date);
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
int year = ???? <------------
System.out.println(date + " is in " + weekOfYear + " of " + year);
,date.getYear
date.getFirstDayOfWeek.getYear
java.Time您应该使用Java 8及更高版本内置的
Java.Time框架。避免使用旧且臭名昭著的麻烦java.util.date/.calendar类。 这些新的Java.Time课程包括for只有日期或时区域的日期价值。请注意,您必须指定一个时区以确定“今天”,因为在世界范围内的日期并不同时相同。
date.getLastDayOfWeek.getYear
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime now = ZonedDateTime.now ( zoneId );
一年的开始/结束,基于周的年度可能与日历年不同。例如,请注意2015年底的Gregorian和ISO 8601日历之间的区别:52&1变为52&53.。
java 8或以后?
转到Basil Bourque的答案
使用Java的java.timeApi.
int calendarYear = now.getYear();
int weekNumber = now.get ( IsoFields.WEEK_OF_WEEK_BASED_YEAR );
int weekYear = now.get ( IsoFields.WEEK_BASED_YEAR ); // Answer to Question
请参阅Gregoriancalendar#getweekyear()
周
用于参考
calendar.getWeekYear();
returns
2015
Calendar calendar = new GregorianCalendar(Locale.GERMAN);
calendar.set(2016, Calendar.JANUARY, 1, 0, 0, 0);
Date date = calendar.getTime();
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
int year = calendar.getWeekYear();
System.out.println(date + " is in " + weekOfYear + " of " + year);
Fri Jan 01 00:00:00 CET 2016 is in 53 of 2015
date timeapi。任何新代码都应使用
java.time
api.
一周的第一天是环境敏感 您的回答中已经提到了它;因此,我会简短。 ISO-8601标准,其次是欧洲大部分地区,定义了一个星期从星期一开始。然而,在美国,
a周从周日开始。由于这种差异,一年的第一周和一周中的ISO-8601标准遵循的国家 /地区有所不同。检查这个答案以了解有关它的更多信息。 我知道calendar.week_of_year可以用来获得“周 “在给定的日期,但是我如何获得相应的一年?
使用java.time
apisolution
您可以使用java.util