it-roy-ru.com

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

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

136
Muhd

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 enum с помощью метода LocalDate::getMonth

36
Ortomala Lokni
Java.util.Date date= new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
262
adarshr

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

LocalDate today = LocalDate.now();
int month = today.getMonthValue();
12
Ketan Chitale

Joda времени

В качестве альтернативы можно использовать класс Joda-TimeDateTime .

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

…или же…

int month = dateTime.getMonthOfYear();
7
ssoward

тЛ; др

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 JVM’s 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 Tutorial на Java.time.

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

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

Класс Month является сложным enum для представления месяца в целом. Это перечисление имеет удобные методы, такие как получение локализованного имени. И будьте уверены, номер месяца в 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 framework встроен в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые унаследованные классы даты и времени, такие как Java.util.Date , Calendar , & SimpleDateFormat .

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

Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация это 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 project адаптируется ThreeTen-Backport (упоминалось выше). Смотрите Как использовать ThreeTenABP… .

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

5
Basil Bourque

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

Примечание. Убедитесь, что дата уже указана в формате: дд/мм/гггг

/**
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));
}
2
Badr DRAIFI
Date mDate = new Date(System.currentTimeMillis());
mDate.getMonth() + 1

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

0
twlkyao