Java: Получить месяц Целое число с даты

Как получить месяц как целое число из объекта Date (java.util.Date)?

Ответ 1

java.time(Java 8)

Вы также можете использовать пакет java.time в Java 8 и преобразовать свой объект java.util.Date объект java.time.LocalDate а затем просто использовать метод getMonthValue().

Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int month = localDate.getMonthValue();

Обратите внимание, что значения месяца здесь приведены от 1 до 12, противоположные cal.get(Calendar.MONTH) в ответе adarshr, который дает значения от 0 до 11.

Но, как сказал в комментариях Василий Бурк, предпочтительным способом является получение объекта перечисления Month с помощью LocalDate::getMonth.

Ответ 2

java.util.Date date= new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);

Ответ 3

Если вы используете Java 8 date api, вы можете напрямую получить его в одной строке!

LocalDate today = LocalDate.now();
int month = today.getMonthValue();

Ответ 4

Joda времени

В качестве альтернативы, с Joda-Time DateTime класс.

//convert date to datetime
DateTime datetime = new DateTime(date);
int month = Integer.parseInt(datetime.toString("MM"))

... или...

int month = dateTime.getMonthOfYear();

Ответ 5

ТЛ; др

myUtilDate.toInstant()                          // Convert from legacy class to modern. 'Instant' is a point on the timeline in UTC.
          .atZone(                              // Adjust from UTC to a particular time zone to determine date. Renders a 'ZonedDateTime' object. 
              ZoneId.of( "America/Montreal" )   // Better to specify desired/expected zone explicitly than rely implicitly on the JVMs current default time zone.
          )                                     // Returns a 'ZonedDateTime' object.
          .getMonthValue()                      // Extract a month number. Returns a 'int' number.

java.time Детали

Ответ Ortomala Lokni на использование java.time верен. И вы должны использовать java.time, поскольку это гигантское улучшение по сравнению со старыми классами java.util.Date/.Calendar. См. Учебник Oracle по java.time.

Я добавлю код, показывающий, как использовать java.time без учета java.util.Date, когда вы начинаете со свежего кода.

Использование java.time в двух словах... Instant момент на временной шкале в UTC. Примените часовой пояс ( ZoneId), чтобы получить ZonedDateTime.

Класс Month - это сложное перечисление для представления месяца в целом. В этом перечислении есть удобные методы, такие как получение локализованного имени. И будьте уверены, что номер месяца в java.time является нормальным, 1-12, а не ноль-нонсенсом (0-11), найденным в java.util.Date/.Calendar.

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

ZoneId zoneId = ZoneId.of( "America/Montreal" );  // Or 'ZoneOffset.UTC'.
ZonedDateTime now = ZonedDateTime.now( zoneId );
Month month = now.getMonth(); 
int monthNumber = month.getValue(); // Answer to the Question.
String monthName = month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH );

О java.time

Рамка java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют неприятные старые устаревшие классы времени, такие как java.util.Date, Calendar и SimpleDateFormat.

Проект Joda-Time, теперь в режиме обслуживания, советует перейти на классы java.time.

Чтобы узнать больше, ознакомьтесь с учебным пособием Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация - JSR 310.

Вы можете обменивать объекты java.time непосредственно с вашей базой данных. Используйте JDBC-драйвер, совместимый с JDBC 4.2 или новее. Нет необходимости в строках, нет необходимости в java.sql.*.

Где можно получить классы java.time?

  • Java SE 8, Java SE 9, Java SE 10 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API с интегрированной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональных возможностей java.time включена обратно в Java 6 и 7 в ThreeTen-Backport.
  • Android
    • Более поздние версии реализаций пакетов Android классов java.time.
    • Для более ранних Android (<26), то ThreeTenABP проект адаптирует ThreeTen-Backport (упоминалось выше). См. Раздел Как использовать ThreeTenABP....

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и другие.

Ответ 6

Если вы не можете использовать время Joda, и вы все еще живете в темном мире :) (Java 5 или ниже), вы можете наслаждаться этим:

Примечание. Убедитесь, что ваша дата уже сделана в формате: dd/MM/YYYY

/**
Make an int Month from a date
*/
public static int getMonthInt(Date date) {

    SimpleDateFormat dateFormat = new SimpleDateFormat("MM");
    return Integer.parseInt(dateFormat.format(date));
}

/**
Make an int Year from a date
*/
public static int getYearInt(Date date) {

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");
    return Integer.parseInt(dateFormat.format(date));
}

Ответ 7

Date mDate = new Date(System.currentTimeMillis());
mDate.getMonth() + 1

Возвращаемое значение начинается с 0, поэтому вы должны добавить его к результату.