Liczba dni w miesiącu

0

Witam.
Czy zna ktoś metodę zwracającą liczbę dni w miesiącu w zależności od roku?
Np. Styczeń 2002 rok podaje jako dane i powinno wyświetlić mi 31 dni.

0

Na przykład:

Calendar kalendarz = new GregorianCalendar(1999, Calendar.FEBRUARY, 1);
int dniMiesiac= kalendarz.getActualMaximum(Calendar.DAY_OF_MONTH); // daje 28

Z latami przestępnymi dla lutego nie ma problemu bodajże.

0

Nie rozumiem czemu ale dla takiego kodu nie działa mi poprawnie.

int year = 2002;
String month = "styczeń";
MonthInYear month = new MonthInYear(month, year);
int ldni =  month.getDays()
System.out.println("Miesiąc " + month + " w roku " + year + " zawiera " + ldni);

chciałbym też zaznaczyć że ma być nu użyta enumeracja.

Oczywiście wiem że jest konflikt zmiennych.

0

Pytanie kierujesz do wróżki? Podaj kod konstruktora MonthInYear(month, year) i metody getDays().

0
private int rok;
	private String miesiac;
	
	public MonthInYear(){}
	public MonthInYear(String m, int r){
		rok = r;
		miesiac = m;
	}

I właśnie o metodę getDays() mi chodzi

0
import java.util.*;
public enum Month 
{
    STYCZEŃ(0),LUTY(1),MARZEC(2),KWIECIEŃ(3),MAJ(4),CZERWIEC(5),LIPIEC(6),
    SIERPIEŃ(7),WRZESIEŃ(8),PAŹDZIERNIK(9),LISTOPAD(10),GRUDZIEŃ(11); 
    int month;

    public static void main(String[] args)
    {
        for(int rok=2012;rok<=2013;rok++)
        {
            for(Month month: Month.values())
            {
                System.out.println("Rok: "+rok+" miesiąc: "+month+" dni: "+getDays(rok,month.month()));
            }
        }    
    }
    Month(int month)
    {
        this.month = month;
    }
    private int month()
    {
        return this.month;
    }
    private static int getDays(int rok,int m)
    {
        Calendar kalendarz = new GregorianCalendar(rok, m, 1);
        return kalendarz.getActualMaximum(Calendar.DAY_OF_MONTH);
    }
}
0

przepraszam a czy mi się wydaje czy tylko w lutym może być różna ilość dni w zależności od roku? bo wtedy z palca możesz wpisać 11 wartości a 12 zrobić dzielenie modulo przez 4

0

Niezupełnie masz rację:

  • dzielenie przez 4 numeru roku nie wystarczy - reguła jest bardziej skomplikowana,
  • klasa GregorianCalendar (wbrew nazwie) obejmuje też czas obowiązywania kalendarza juliańskiego - wtedy reguła ustalania lat przestępnych była inna obecnie,
  • czy Twoje rozwiązanie będzie krótsze od tego:
Calendar kalendarz = new GregorianCalendar(rok, m, 1);
return kalendarz.getActualMaximum(Calendar.DAY_OF_MONTH);

1 użytkowników online, w tym zalogowanych: 0, gości: 1