Java: получить месячное целое число от даты - PullRequest
141 голосов
/ 25 августа 2011

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

Ответы [ 7 ]

270 голосов
/ 25 августа 2011
java.util.Date date= new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
40 голосов
/ 15 июня 2015

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 метод.

13 голосов
/ 01 сентября 2016

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

LocalDate today = LocalDate.now();
int month = today.getMonthValue();
7 голосов
/ 29 июля 2014

Joda-Time

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

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

… или…

int month = dateTime.getMonthOfYear();
6 голосов
/ 16 января 2016

ТЛ; др

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 Подробности

Правильный ответ Ортомалы Локни за использование 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 встроен в 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?

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

3 голосов
/ 26 февраля 2016

Если вы не можете использовать время 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));
}
0 голосов
/ 13 мая 2015
Date mDate = new Date(System.currentTimeMillis());
mDate.getMonth() + 1

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...