CodingNinjaInTraining
CodingNinjaInTraining

Reputation: 65

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));
    }

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

Answers (1)

MadProgrammer
MadProgrammer

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 SATURDAYs 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");

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");

Upvotes: 2

Related Questions