公历返回奇怪的值?
Gregorian Calendar returning strange values?
public class MyCalendar {
GregorianCalendar greg = new GregorianCalendar();
String[] month = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
String[] day = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
public void printMonth(int d, int m, int y) {
GregorianCalendar greg= new GregorianCalendar(greg.get(Calendar.YEAR),
greg.get(Calendar.MONTH), 1);
System.out.println(month[greg.get(Calendar.MONTH)]);
System.out.println(greg.get(Calendar.FRIDAY));
System.out.println(greg.get(Calendar.SATURDAY));
}
我无法弄清楚为什么 greg.get(Calendar._____) 会给我意想不到的值。
YEAR, MONTH, DATE all give me correct values: 2015, 9, 6
FRIDAY returns 279
SATURDAY returns 3
SUNDAY returns 2015
TUESDAY returns 41
有人可以向我解释为什么我会收到这些数字吗?我试图找出如何确定该月所有星期六的日期,并认为 greg.get(Calendar.SATURDAY)
可能对这样做有用。
因此,Calendar#get
允许您获取 Calendar
对象的特定字段,例如 DAY_OF_WEEK
,然后可以通过 [ 将其映射回 Calendar.MONDAY
=17=] 以便更容易理解 return 结果。
所以,要计算一个月内 SATURDAY
的数量,您需要先找到第一个 SATURDAY
(是的,我在设置后尝试使用 cal.set(Calendar.DAY_OF_WEEK, Calendar.SATUDAY)
DATE
,但给出了不一致的结果)
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, 1);
while (cal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY) {
cal.add(Calendar.DATE, 1);
}
然后简单地向前数 7 天,直到我们离开当前月份
int count = 0;
int month = cal.get(Calendar.MONTH);
while (cal.get(Calendar.MONTH) == month) {
count++;
cal.add(Calendar.DATE, 7);
}
System.out.println("This month has " + count + " saturdays");
Java 8
LocalDate date = LocalDate.now();
LocalDate endOfMonth = date.withDayOfMonth(date.lengthOfMonth());
date = date.withDayOfMonth(1);
System.out.println(date);
date = date.with(ChronoField.DAY_OF_WEEK, DayOfWeek.SATURDAY.getValue());
int count = 0;
while (date.isEqual(endOfMonth) || date.isBefore(endOfMonth)) {
count++;
date = date.plusDays(7);
}
System.out.println("You have " + count + " Saturdays");
public class MyCalendar {
GregorianCalendar greg = new GregorianCalendar();
String[] month = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
String[] day = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
public void printMonth(int d, int m, int y) {
GregorianCalendar greg= new GregorianCalendar(greg.get(Calendar.YEAR),
greg.get(Calendar.MONTH), 1);
System.out.println(month[greg.get(Calendar.MONTH)]);
System.out.println(greg.get(Calendar.FRIDAY));
System.out.println(greg.get(Calendar.SATURDAY));
}
我无法弄清楚为什么 greg.get(Calendar._____) 会给我意想不到的值。
YEAR, MONTH, DATE all give me correct values: 2015, 9, 6
FRIDAY returns 279
SATURDAY returns 3
SUNDAY returns 2015
TUESDAY returns 41
有人可以向我解释为什么我会收到这些数字吗?我试图找出如何确定该月所有星期六的日期,并认为 greg.get(Calendar.SATURDAY)
可能对这样做有用。
因此,Calendar#get
允许您获取 Calendar
对象的特定字段,例如 DAY_OF_WEEK
,然后可以通过 [ 将其映射回 Calendar.MONDAY
=17=] 以便更容易理解 return 结果。
所以,要计算一个月内 SATURDAY
的数量,您需要先找到第一个 SATURDAY
(是的,我在设置后尝试使用 cal.set(Calendar.DAY_OF_WEEK, Calendar.SATUDAY)
DATE
,但给出了不一致的结果)
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, 1);
while (cal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY) {
cal.add(Calendar.DATE, 1);
}
然后简单地向前数 7 天,直到我们离开当前月份
int count = 0;
int month = cal.get(Calendar.MONTH);
while (cal.get(Calendar.MONTH) == month) {
count++;
cal.add(Calendar.DATE, 7);
}
System.out.println("This month has " + count + " saturdays");
Java 8
LocalDate date = LocalDate.now();
LocalDate endOfMonth = date.withDayOfMonth(date.lengthOfMonth());
date = date.withDayOfMonth(1);
System.out.println(date);
date = date.with(ChronoField.DAY_OF_WEEK, DayOfWeek.SATURDAY.getValue());
int count = 0;
while (date.isEqual(endOfMonth) || date.isBefore(endOfMonth)) {
count++;
date = date.plusDays(7);
}
System.out.println("You have " + count + " Saturdays");