Reputation: 65
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));
}
I'm having trouble figuring out why greg.get(Calendar._____) is giving me unexpected values.
YEAR, MONTH, DATE all give me correct values: 2015, 9, 6
FRIDAY returns 279
SATURDAY returns 3
SUNDAY returns 2015
TUESDAY returns 41
Could someone explain to me why I'm getting these numbers? I was trying to find out how to the date for all Saturdays of the month and thought greg.get(Calendar.SATURDAY)
might have been useful in doing so.
Upvotes: 1
Views: 192
Reputation: 347184
So, Calendar#get
allows you to get a paritcular field of the Calendar
object, such as DAY_OF_WEEK
, which can then be mapped back to Calendar.MONDAY
through Calendar.SUNDAY
to make it simpler to understand the return result.
So, to count the number of SATURDAY
s in a month, you will need to first find the first SATURDAY
(and yes, I tried using cal.set(Calendar.DAY_OF_WEEK, Calendar.SATUDAY)
after setting the DATE
, but it gave inconsistent results)
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, 1);
while (cal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY) {
cal.add(Calendar.DATE, 1);
}
And then simply count forward 7 days until we leave the current month
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");
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");
Upvotes: 2