Как узнать, сколько дней имеет определенный месяц конкретного года?
String date = "2010-01-19";
String[] ymd = date.split("-");
int year = Integer.parseInt(ymd[0]);
int month = Integer.parseInt(ymd[1]);
int day = Integer.parseInt(ymd[2]);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month);
int daysQty = calendar.getDaysNumber(); // Something like this
java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
теперь унаследованные , вытеснены классами java.time, встроенными в Java 8 и более поздние версии . Смотрите Учебник по Oracle .Ответы:
Java 8 и позже
@ Уоррен М. Нокос. Если вы пытаетесь использовать новый API даты и времени в Java 8 , вы можете использовать
java.time.YearMonth
класс. Смотрите Oracle Tutorial .Тест: попробуйте месяц в високосный год:
Java 7 и более ранние
Создать календарь, установить год и месяц и использовать
getActualMaximum
Тест : попробуйте месяц в високосный год:
источник
Код для java.util.Calendar
Если вам нужно использовать
java.util.Calendar
, я подозреваю, что вы хотите:Код для Joda Time
Лично, однако, я бы предложил использовать Joda Time вместо того,
java.util.{Calendar, Date}
чтобы начать, в этом случае вы могли бы использовать:Обратите внимание, что вместо того, чтобы анализировать строковые значения по отдельности, было бы лучше получить любой API даты / времени, который вы используете для его анализа. В
java.util.*
вы можете использоватьSimpleDateFormat
; в Joda Time вы бы использовалиDateTimeFormatter
.источник
Вы можете использовать
Calendar.getActualMaximum
метод:источник
java.time.LocalDate
С Java 1.8, вы можете использовать метод
lengthOfMonth
наjava.time.LocalDate
:источник
источник
Это математический способ:
Для года, месяца (от 1 до 12):
источник
Я бы пошел на решение, как это:
Если месяц не февраль (92% случаев), он зависит только от месяца и более эффективно не включать год. Таким образом, вам не нужно вызывать логику, чтобы узнать, является ли это високосным годом, и вам не нужно получать год в 92% случаев. И это все еще чистый и очень читаемый код.
источник
В Java8 вы можете использовать get ValueRange из поля даты.
Это позволяет вам параметризовать на поле.
источник
Все просто, не нужно ничего импортировать
источник
источник
android.util.MonthDisplayHelper
)источник
источник
Calendar
Следует избегать использования устаревшего API.В Java8 или более поздней версии это можно сделать с помощью
YearMonth
.Пример кода:
источник
Call requires API level 26 (current min is 21): java.time.YearMonth#lengthOfMonth
Позволяет упростить задачу, если вы не хотите жестко задавать значение года и месяца и хотите взять значение из текущей даты и времени:
источник
Вы можете использовать метод Calendar.getActualMaximum:
И month-1 is Из-за month принимает свое первоначальное число month, а в методе принимает аргумент, как показано ниже в Calendar.class
И (поле int) выглядит так, как показано ниже.
источник
Следующий метод предоставит вам количество дней в конкретном месяце
источник
Оптимальная и производительная дисперсия:
Для более подробной информации об алгоритме скачка проверьте здесь
источник
источник
Это работало нормально для меня.
Это пример вывода
источник
источник