Java 在计算周数时更加复杂,而 SQL-Server DATEPART(WEEK... 更加简单。我发现以下文档记录在这里
“在设置或获取 WEEK_OF_MONTH 或 WEEK_OF_YEAR 字段时,Calendar 必须确定月份或年份的第一周作为参考点。月份或年份的第一周定义为从 getFirstDayOfWeek() 开始并包含至少 getMinimalDaysInFirstWeek() "
我认为这默认为ISO标准,这是一年中的第一周,其中有一个星期四(星期一至星期日,一年中至少有 4 天)。考虑使用:
在 SQL Server 中,该DATEPART(WEEK, ..)
函数要简单得多,它只是计算DATEFIRST
1 月 1 日和输入日期之间的周边界数(由 定义),因此 1 月 1 日始终是第 1 周。您不妨考虑使用:
SELECT DATEPART(ISO_WEEK, '01/01/2012')
这将获得ISO标准定义的周数,即一年中的第一周,其中有一个星期四(星期一至星期日的星期,一年中至少有 4 天)。
由于 SQL Server 的计算更加简单,因此无法对其进行配置,这意味着您需要在 Java 中配置周数。只需确保您在 Java 中使用正确的值设置日历getFirstDayOfWeek()
和getMinimalDaysInFirstWeek()
:
public static Calendar getISOCalendar() {
Calendar calendar = Calendar.getInstance();
calendar.setMinimalDaysInFirstWeek(4);
calendar.setFirstDayOfWeek(Calendar.MONDAY);
return calendar;
}
然后,您可以确保一致的周数。
public static void main(String args[]) {
Calendar calendar = getISOCalendar();
calendar.set(2012,0,1);
System.out.println(calendar.get(Calendar.WEEK_OF_YEAR));
}
------
52