2017-01-17 2 views
4

Я имею данную дату:Как получить последний день месяца для указанной даты

01/10/2017(mm/dd/yyyy) 

Calendar c = c.getInstance(); 

c.setTime(date); 

Теперь, чтобы указать на последний день месяца, я использую следующий код:

c.set(Calendar.Date, c.getActualMaximum(Calendar.Date)); 

Ожидаемый результат: 01/31/2017

Оригинальный выход: 02/01/2017

Я не получаю ожидаемый результат. Его возвращение мне в первый день следующего месяца.

Может ли кто-нибудь мне помочь?

+1

Для записи: пожалуйста, смотрите в использовании * разметки * при вводе кода в ваши сообщения; не ставьте все как обычный текст! – GhostCat

+0

И, прежде чем отправлять сообщения, просмотрите Stack Overflow. –

ответ

8

Лучше использовать новые функции времени даты Java-здесь:

LocalDate date = LocalDate.of(2000, Month.OCTOBER, 15); 
LocalDate lastOfMonth = date.with(TemporalAdjusters.lastDayOfMonth()); 
System.out.printf("last day of Month: %s%n", lastOfMonth); 

Да, теоретически вы можете также использовать объекты календаря и делать все виды операций низкого уровня самостоятельно. Но есть вероятность: вы получите это неправильно ... ну, если вы не посмотрите here и следуйте советам оттуда.

Но поскольку Василий правильно указывает: проект 310 довольно близок к java.time (потому что позже был разработан, чтобы соответствовать первому); и 310 можно «портировать» back на Java7. Поэтому, если есть более одного места, где вам нужно иметь дело с датами, я бы посмотрел именно на это: облегчить вашу жизнь, используя «здоровую» библиотеку даты и времени.

+0

На самом деле я развиваюсь в среде Java 7. –

+0

Тогда я бы сказал: DUP, который был указан, должен отвечать на все ваши вопросы. – GhostCat

+1

См. Проект [** ThreeTen-Backport **] (http://www.threeten.org/threetenbp/) для back-port большей части функций java.time для Java 6 и Java 7. Дальнейшая адаптация к Android в проекте ThreeTenABP –

0

У меня есть сомнения относительно mm/dd/yyyy. Попробуйте

Date d = new SimpleDateFormat("MM/dd/yyyy").parse("01/10/2017"); 
Calendar c = Calendar.getInstance(); 
c.setTime(d); 
c.set(Calendar.DATE, c.getActualMaximum(Calendar.DATE)); 
System.out.println(c.getTime()); 

это дает ожидаемую дату:

Tue Jan 31 00:00:00 EET 2017

Смежные вопросы