Как найти текущую продолжительность месяца в Java?

Это мой код Java, чтобы найти текущий месяц / дату, в которой мы находимся:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class GetCurrentDateTime {

 private static final DateFormat sdf = new SimpleDateFormat("MM-dd");


public static void main(String[] args) {

    Date date = new Date();
    System.out.println(sdf.format(date));

     }
}

Я хочу, чтобы этот код делал что-то еще. Когда код находит месяц, в котором мы находимся, я также хочу, чтобы он нашел длину месяца. Результат должен быть таким:

08-16
31

ты можешь помочь мне с этим? Спасибо.

4 ответа

ТЛ; др

YearMonth.now()
         .lengthOfMonth()

подробности

Избегайте проблемных старых классов даты и времени, которые можно увидеть в Вопросе. Теперь вытеснены классами java.time.

Часовой пояс имеет решающее значение в определении сегодняшней даты и, следовательно, в определении текущего месяца. В любой момент времени дата меняется по всему земному шару в зависимости от зоны.

ZoneId z = ZoneId.of( "America/Montreal" ) ;
YearMonth ym = YearMonth.now( z ) ;
int daysInMonth = ym.lengthOfMonth() ;

Вы можете попробовать что-то вроде этого, но я думаю, что может быть лучший способ:

Date date = new Date();
System.out.println(sdf.format(date));
Calendar c = Calendar.getInstance();
c.setTime(date);
System.out.println(c.getActualMaximum(Calendar.DAY_OF_MONTH));

Вывод такой:

08-16
31

РЕДАКТИРОВАТЬ:
Как написано в комментариях:

Используйте решение от Василия YearMonth.now().lengthOfMonth()Лучше, чем этот

Может быть, это:

   @Test
    public void daysOfMonthTest() throws Exception {
    Calendar mycal = new GregorianCalendar();

    assertEquals(
            31,
            mycal.getActualMaximum(Calendar.DAY_OF_MONTH));
    }

Примечание. Месяцы пронумерованы от 0 (январь) до 11 (декабрь).

Использование простого объекта даты:

        Date date = new Date();
        int month = date.getMonth() + 1;
        int year = date.getYear()+1900;
        System.out.print(month+"-"+year);

Выход:

 8-2017

Использование объекта календаря:

     Date date = new Date(); // your date
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    int year = cal.get(Calendar.YEAR);
    int month = cal.get(Calendar.MONTH);
    int day = cal.get(Calendar.DAY_OF_MONTH) + 1;
    System.out.print(month+"-"+year);
    System.out.print("Number of days: "+cal.getActualMaximum(Calendar.DAY_OF_MONTH));

Выход:

8-2017
Number of days: 31

Использование JodaTime:

    DateTime  dateTime = new DateTime();
    System.out.print(dateTime.getMonthOfYear()+"-"+(dateTime.getYear()));
    System.out.print("Number of days: "+ dateTime.dayOfMonth().getMaximumValue());

Выход:

8-2017
Number of days: 31
Другие вопросы по тегам