Как найти текущую продолжительность месяца в 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