我有这段代码,可以正确地返回星期数。
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
我的日期格式是 。
现在,当我把我的日期格式改为:
輸出是不同的。
輸出。
月内天数。31
月内周数。4
需要投入,如 无论我们使用什么日期格式,我如何才能得到正确的输出。?
回答问题 我如何更新格式 : a) 进入控制面板 -> 时钟和区域。
b) 选择 Change date, time or number format link.你会得到下面的弹窗,只需更改格式即可。
你的结果应该是这样的。既然你期望的是别的东西,那么你的期望一定是错的。
在你的代码中,你并没有查询这个月的周数。你查询的是这个月中最高的周数。这在美国是6,在英国是4。尽管两个地方的月份长度是一样的。
在我的演示中,我使用了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得到你想要的结果,但即使我在评论中问了,你也没有告诉我们你认为一个月中正确的周数是多少,所以我不能。