Как найти номер дня (целое число) последнего дня в текущем месяце - PullRequest
0 голосов
/ 31 мая 2018

У меня есть конкретная дата, и я хочу найти номер последнего дня (целое число) месяца.Я использую следующий код, но всегда возвращаю текущую дату.

    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    Date date = (Date) sdf.parse(year+"-"+(month<10?("0"+month):month)+"-01");


    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);

    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DAY_OF_MONTH, 1);
    calendar.add(Calendar.DATE, -1);

    Date dt = (Date) calendar.getTime(); -> dt is return current date always

пример: моя дата = 2018/04/30, и я хочу найти 30.

Я не смог найти ответ на сайте.

Thnx

Ответы [ 5 ]

0 голосов
/ 31 мая 2018

Если используется Java 8 (или выше), не используйте Calendar.Если вы используете Java 6 или 7, вы можете рассмотреть возможность использования ThreeTen Backport .В любом случае используйте API времени Java.


Использование времени Java

Так как ввод int year и int month, используйте YearMonth.

Чтобы узнать номер последнего дня месяца, позвоните по номеру lengthOfMonth().

Чтобы узнать дату в конце месяца, позвоните по номеру atEndOfMonth().

Демо

int year = 2020;
int month = 2;

int lastDay = YearMonth.of(year, month).lengthOfMonth();
System.out.println(lastDay);

LocalDate date = YearMonth.of(year, month).atEndOfMonth();
System.out.println(date);

Выход

29
2020-02-29

Использование Joda-Time

Если у вас нет Java 8 и вы уже используете Joda-Time , сделайте это следующим образом:

Демо

int year = 2020;
int month = 2;

int lastDay = new LocalDate(year, month, 1).dayOfMonth().getMaximumValue();
System.out.println(lastDay);

LocalDate date = new LocalDate(year, month, 1).dayOfMonth().withMaximumValue();
System.out.println(date);

Вывод

29
2020-02-29

Использование календаря

Если вы настаиваете на использовании Calendar, позвоните getActualMaximum(Calendar.DAY_OF_MONTH), а такжеупоминается в других ответах.

Поскольку входные данные int year и int month, не создавайте и не анализируйте строку, просто установите поля Calendar напрямую.Обратите внимание, что «месяц» в Calendar начинается с нуля.

Демонстрация

int year = 2020;
int month = 2;

Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(year, month - 1, 1);
int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

calendar.set(Calendar.DAY_OF_MONTH, lastDay);
Date date = calendar.getTime();

System.out.println(lastDay);
System.out.printf("%tF%n", date);

Выход

29
2020-02-29
0 голосов
/ 31 мая 2018

Во-первых, как вы получаете год, который будет использоваться?

это должно быть просто, используя Java Time LocalDate:

import java.time.*;
import static java.time.Month.*;
import static java.time.temporal.TemporalAdjusters.*;
import static java.time.temporal.ChronoField.*;

int lastDay = LocalDate.now()   // or whatever date you want
                  .with(Month.of(yourMonth))
                  .with(lastDayOfMonth())
                  .get(DAY_OF_MONTH);

 // or, if you have year and month, and want to find the corresponding last day
int lastDay = LocalDate.of(yourYear, yourMonth, 1)
                  .with(lastDayOfMonth())
                  .get(DAY_OF_MONTH);
0 голосов
/ 31 мая 2018

имеет конкретную дату, и я хочу найти номер последнего дня (целое число) месяца

getActualMaximum() - это то, что вы ищете здесь.

Calendar cal = Calendar.getInstance();
cal.setTime(parsedDate);
cal.getActualMaximum(Calendar.DAY_OF_MONTH);
0 голосов
/ 31 мая 2018
Calendar calendar =Calendar.getInstance();
calendar.set(Calendar.DATE, 1); 
calendar.roll(Calendar.DATE, -1); 
int lastDate=calendar.get(Calendar.DATE);
0 голосов
/ 31 мая 2018

Вы можете использовать календарь для этого, например:

calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

Или, если у вас есть йода, что обычно лучше:

DateTime d = new DateTame(dt);
d.dayOfMonth().getMaximumValue();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...