有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

一年中的公历周是如何运作的

为什么打印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

共 (3) 个答案

  1. # 1 楼答案

    tl;博士

    LocalDate.now().get( IsoFields.WEEK_OF_WEEK_BASED_YEAR )
    
    < 2021的ISO 8601 week-based year,从2021年1月4日星期一到2022年1月2日2022年1月2日(包含)。

    在标准符号中,2021年2月9日是基于周的第六周的第二天星期二:2021:BR/>^ }/P>

    细节

    可怕的类GregorianCalendar在几年前被现代的java所取代。JSR 310中定义的时间

    爪哇。时间

    获取当前日期

    LocalDate today = LocalDate.now( ZoneId.of( "Asia/Kolkata" ) ) ;
    

    使用definition of ISO 8601获取基于一周的一年中的一周。在这个定义中:

    • 一周是周一周日
    • 第一周是日历年的第一个星期四

    根据这一定义,以周为基础的一年有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年的^ {A4}。

  2. # 2 楼答案

    ^{}是一个常数,你不能这样使用它

    你可能是指calendar.get(Calendar.WEEK_OF_YEAR)(今天2月9日,它将打印7,而不是6,因为它是基于1的,而不是基于0的)

    请注意,正如Basil Bourque给出的好答案所解释的,您应该使用新的DateTime API

  3. # 3 楼答案

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

    {a5}很好地解释了如何使用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));
        }
    }
    

    输出:

    Current week: 6
    Current week: 6
    

    第01周的ISO 8601 definition是公历年(即1月)的第一个Thursday所在的一周。根据这个定义,第2021周第01周从1月4日开始,因此当前的一周是第六周。

    enter image description here