Java 每年的公历周是如何运作的

Java 每年的公历周是如何运作的,java,date,gregorian-calendar,Java,Date,Gregorian Calendar,为什么calendar.WEEK OF YEAR打印的是3而不是6 GregorianCalendar calendar = new GregorianCalendar(); System.out.println("time"+calendar.getTime()); System.out.println("week of year "+calendar.WEEK_OF_YEAR); 输出 time Tue Feb 09 12:58:02 IST 202

为什么calendar.WEEK OF YEAR打印的是3而不是6

GregorianCalendar calendar = new GregorianCalendar();
System.out.println("time"+calendar.getTime());
System.out.println("week of year "+calendar.WEEK_OF_YEAR);
输出

time Tue Feb 09 12:58:02 IST 2021
week of year 3
是一个常数,你不能这样使用它


您可能指的是calendar.getCalendar.WEEK\u OF_YEAR,今天2月9日它将打印7,而不是6,因为它是基于1的,而不是基于0的

请注意,正如Basil Bourque的漂亮回答所解释的,您应该使用新的DateTime API。

tl;博士 从2021年1月4日(星期一)到2022年1月2日(星期日)的2021年第一季度

用标准符号表示,2021年2月9日是基于2021:2021-W06-2的一周中第六周的第二天星期二

细节 可怕的类GregorianCalendar在几年前被JSR310中定义的现代java.time类所取代

java.time 获取当前日期

LocalDate today = LocalDate.now( ZoneId.of( "Asia/Kolkata" ) ) ;
使用获取基于一年的一周中的一周。在这一定义中:

一周是星期一星期天 第一周包含日历年的第一个星期四。 根据这一定义,以周为基础的年度有52个或更多 整整53周

int week = today.get ( IsoFields.WEEK_OF_WEEK_BASED_YEAR );
并获取该日期基于周的年份的年份号。这可能与第一周和最后一周的日历年编号不同

int weekYear = now.get ( IsoFields.WEEK_BASED_YEAR );
例如,2021年的ISO 8601周基准年从2021年1月4日开始。2021年2月9日是第6周

请参见ISO 8601中基于周的2021年。

java.util的日期时间API及其格式化API SimpleDateFormat已过时且容易出错。建议完全停止使用,并切换到

无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7。 如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。 本文很好地解释了如何使用JavaSE8日期时间API。如果仍要使用传统API,则有两个选项:

import java.text.SimpleDateFormat;
import java.util.Calendar;

class Main {
    public static void main(String[] args) {

        Calendar calendar = Calendar.getInstance();

        // Getting current week using SimpleDateFormat
        System.out.println("Current week: " + new SimpleDateFormat("w").format(calendar.getTime()));

        // Getting current week using Calendar.WEEK_OF_YEAR
        System.out.println("Current week: " + calendar.get(Calendar.WEEK_OF_YEAR));
    }
}
输出:

第01周是公历年的第一个星期四,即1月的第一个星期四。根据这一定义,2021年的第01周从1月4日开始,因此本周为第6周


如果是以1为基础,那么当前周应该是6,对吗?实际上,只要是第6周,就可以了解ISO规定的第一周是什么。谢谢,巴兹尔,我还有一个疑问,为什么它会像本周那样打印第7周6@saurabhkumar根据ISO 8601的定义,这是第7周。2021年第1周开始于2020年12月28日。星期有几种定义。您忽略了指定您的.calendar.getCalendar.WEEK\u OF\u YEAR打印7@saurabhkumar是的,正确,现在已在注释中修复。谢谢我补充回答。我必须在喝咖啡之前停止发帖。@saurabhkumar是的,同一个网站显示。在这种情况下,2020年有53周,对吗?我的产出与你的本周不同:7本周:7
import java.text.SimpleDateFormat;
import java.util.Calendar;

class Main {
    public static void main(String[] args) {

        Calendar calendar = Calendar.getInstance();

        // Getting current week using SimpleDateFormat
        System.out.println("Current week: " + new SimpleDateFormat("w").format(calendar.getTime()));

        // Getting current week using Calendar.WEEK_OF_YEAR
        System.out.println("Current week: " + calendar.get(Calendar.WEEK_OF_YEAR));
    }
}
Current week: 6
Current week: 6