Как получить месяц как целое число из объекта Date (java.util.Date
)?
Java: Получить месяц Целое число с даты
Ответ 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, поэтому вы должны добавить его к результату.