无论使用何种日期格式,都需要获得正确的月周数输出。

问题描述 投票:0回答:1

我有这段代码,可以正确地返回星期数。

package org.test.Calendar;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class GetDaysInMonth {
    public static void main(String[] args) {
        Calendar calendar = GregorianCalendar.getInstance();
        int year = 2020;
        int month = Calendar.MAY;
        int date = 1;
        calendar.set(year, month, date);
        int numOfDaysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        int numOfWeeksInMonth = calendar.getActualMaximum(Calendar.WEEK_OF_MONTH);

        System.out.println("Number of Days In Month: " + numOfDaysInMonth);
        System.out.println("Number of Weeks In Month: " + numOfWeeksInMonth);
    }    
}

輸出 :

月内天数。31

月内周数。6

我的日期格式是 。

enter image description here

现在,当我把我的日期格式改为:

enter image description here

輸出是不同的。

輸出。

月内天数。31

月内周数。4

需要投入,如 无论我们使用什么日期格式,我如何才能得到正确的输出。?

回答问题 我如何更新格式 : a) 进入控制面板 -> 时钟和区域。enter image description here

b) 选择 Change date, time or number format link.你会得到下面的弹窗,只需更改格式即可。

enter image description here

java java-8 calendar java-time gregorian-calendar
1个回答
2
投票

你的结果应该是这样的。既然你期望的是别的东西,那么你的期望一定是错的。

  • 在美国,一周从周日开始。每月的第1周是包含本月第一天的一周。所以5月1日星期五和5月2日星期六组成第一周。第2周从5月3日星期日开始。第3周在5月10日,第4周在5月17日,第5周在5月24日,第6周刚好由5月的31日组成。
  • 英国沿用了国际标准,即一周从周一开始,每月的第1周是指每月至少包含4天的第一周。所以第1周是从5月4日星期一到5月10日星期日。第2周从5月11日开始,第3周是5月18日。第4周是5月25日到31日,因此是这个月的最后一周。

在你的代码中,你并没有查询这个月的周数。你查询的是这个月中最高的周数。这在美国是6,在英国是4。尽管两个地方的月份长度是一样的。

java.time

在我的演示中,我使用了java.time,现代Java日期和时间API,建议你在你的日期工作中也这样做。现代的类比起那些过时的 Calendar 类,坦率地说,它的设计总是很糟糕。

    YearMonth mayThisYear = YearMonth.of(2020, Month.MAY);
    LocalDate firstOfMonth = mayThisYear.atDay(1);
    LocalDate lastOfMonth = mayThisYear.atEndOfMonth();

    // US weeks
    WeekFields us = WeekFields.of(Locale.US);
    int weekOfFirstDay = firstOfMonth.get(us.weekOfMonth());
    int weekOfLastDay = lastOfMonth.get(us.weekOfMonth());
    System.out.println("US week numbers are " + weekOfFirstDay + " - " + weekOfLastDay);

产。

美国周数为1-6

我们还是试试大不列颠及北爱尔兰联合王国,简称UK。

    // UK weeks
    WeekFields uk = WeekFields.of(Locale.UK);
    int weekOfFirstDay = firstOfMonth.get(uk.weekOfMonth());
    int weekOfLastDay = lastOfMonth.get(uk.weekOfMonth());
    System.out.println("UK week numbers are " + weekOfFirstDay + " - " + weekOfLastDay);

英国的周数是0到4

我应该很想告诉你如何使用java.time得到你想要的结果,但即使我在评论中问了,你也没有告诉我们你认为一个月中正确的周数是多少,所以我不能。

© www.soinside.com 2019 - 2024. All rights reserved.