Всем доброго времени суток! Например, у меня на входе есть String date = "05.2018" (май 2018). Затем я преобразую это все в тип Date. Как мне получить на выходе вот это - 01.05.2018 02.05.2018 ... 31.05.2018 ?
Немного переписал код из этого ответа.
Тут используется LocalDate и DateTimeFormatter из java 8:
LocalDate ld = LocalDate.of(2018, 5, 1);
do {
System.out.println(ld.format(DateTimeFormatter.ofPattern("dd.MM.yyyy")));
ld = ld.plusDays(1);
} while (ld.getDayOfMonth() > 1); // arive at 1st of next month
В консоли:
01.05.2018
02.05.2018
03.05.2018
04.05.2018
...
30.05.2018
31.05.2018
PS.
Строку с датой можно распарсить:
String date = "05.2018";
String[] parts = date.split("\\.");
int year = Integer.parseInt(parts[1]);
int month = Integer.parseInt(parts[0]);
int day = 1;
LocalDate ld = LocalDate.of(year, month, day);
...
PPS.
Двойные слеши нужны в date.split("\\.");
для экранирования .
, т.к. в split
не просто строка-разделитель указывается, а регулярное выражение. Точка .
в регулярках является метасимволом, поэтому и нужно экранирование -- чтобы символ считался как есть
Прибавлять по одному дню:
int days = Days.daysBetween(startDate, endDate).getDays();
List<LocalDate> dates = new ArrayList<LocalDate>(days); // Список дат.
for (int i=0; i < days; i++) {
LocalDate d = startDate.withFieldAdded(DurationFieldType.days(), i);
dates.add(d);
}
Просто ради тренировки, решение с использованием потоков:
LocalDate ld = LocalDate.of(2018, 5, 1);
Stream.iterate(ld.withDayOfMonth(1), t -> t.plusDays(1)).limit(ld.lengthOfMonth()).peek(System.out::println).count();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть метод, осуществляющий распаковку строки а-ля 2AB3C в AABCCC
Моя реализация очень похожа на тот что в примере
Подскажите, пожалуйста, элементарный пример работы Retrofit2, в сети примеров куча, но все со своими подвохами