Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Високосный год...


Автор: Alone 19.2.2004, 16:54
Доброго дня.
Есть ли в яве возможност стандартными средствами определить високосный год?
Или придумывать велосипед самому?

Автор: Alone 19.2.2004, 17:11
Вот, нашел как это реализовать в PHP...
Цитата

при проверке является ли год с номером Year високосным следует помнить, что год считается таковым, если его номер делится нацело на 4, но не делится на 100 или делится нацело на 400, иначе говоря (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0))

Но встал вопрос, а как на яве проверить остаток после деления?

Автор: AntonSaburov 19.2.2004, 17:16
Посмотри класс GregorianCalendar
По умолчанию для Calendar.getInstance() он как раз и создается. И вот там есть метод isLeapYear(int year)

И это правильно - ибо именно в Григорианском календаре есть високосный год.

Автор: Alone 19.2.2004, 17:30
Тогда подскажи, какие мои действия, если я использую не GregorianCalendar a Calendar?

вот:
Код

public setDate(){
   date=new java.util.Date();
   calendar = java.util.Calendar.getInstance();
   ...
}
   private java.util.Date date;
   private java.util.Calendar calendar;

Автор: Alone 19.2.2004, 17:39
Я пошел таким путем:

java.util.GregorianCalendar c=new java.util.GregorianCalendar();
boolean isLeap=c.isLeapYear(year);

Автор: Alone 19.2.2004, 17:51
Вот, состряпал, если кому сгодится, буду рад smile.gif

Код

public int getDaysOfMonth(int month, int year){
 
       if( (month>11 || month<0) && year==0)
           return 0;
       
       java.util.GregorianCalendar c=new java.util.GregorianCalendar();
       int ar[]=new int[12];
       ar[0]=31;
       ar[1]=(c.isLeapYear(year) ) ? 28:29;
       ar[2]=31;
       ar[3]=30;
       ar[4]=31;
       ar[5]=30;
       ar[6]=31;
       ar[7]=31;
       ar[8]=30;
       ar[9]=31;
       ar[10]=30;
       ar[11]=31;
       
       return ar[month];
   }

Автор: AntonSaburov 19.2.2004, 17:52
Цитата
java.util.Calendar.getInstance();

Так вот Григорианский календарь и возвращается по умолчанию. Во всяком случае с версии Java 1.2 пока так.

Автор: Alone 19.2.2004, 17:57
м... неа.
Среди доступных методов isLeap() не встерчается... sad.gif
Я ж почему и поднял бучу...

Автор: AntonSaburov 20.2.2004, 12:50
Цитата
Среди доступных методов isLeap() не встерчается

Так надо приведение типов сделать:

Код

CregorianCalendar cl = (CregorianCalendar)Calendar.getInstance();
if(cl.isLeapYear) {
   // Текущий год високосный
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)