java.time
Теперь стало намного проще с современными классами java.time, которые вытесняют проблемные старые классы даты и времени, которые можно увидеть здесь в Вопросе и других ответах.Фреймворк java.time встроен в Java 8 и более поздние версии.Эти классы вытесняют старые проблемные классы даты и времени, такие как java.util.Date
, .Calendar
и & java.text.SimpleDateFormat
.
Теперь в режиме обслуживания , проект Joda-Time также рекомендует перейти на java.time.
Чтобы узнать больше, см. Oracle Tutorial .И поищите в Stack Overflow множество примеров и объяснений.
Большая часть функций java.time перенесена в Java 6 & 7 в ThreeTen-Backport и дополнительно адаптирована для Android in ThreeTenABP .
Проект ThreeTen-Extra расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.
YearMonth
Класс YearMonth
предоставляет именно то, что вы хотите.
YearMonth start = YearMonth.of( 2008 , Month.OCTOBER );
YearMonth stop = YearMonth.of( 2009 , Month.DECEMBER );
List<YearMonth> yms = new ArrayList<>();
YearMonth ym = start ;
while( ! ym.isAfter( stop ) ) {
yms.add( ym );
// Set up the next loop.
ym = ym.plusMonths( 1 );
}
Чтобы представить, используйте DateTimeFormatter
длясгенерируйте строковое представление значения YearMonth
.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM MMM" );
f = f.withLocale( Locale.CANADA_FRENCH ); // Or Locale.US etc.
String output = ym.format( f );
Чтобы получить последний день месяца, опросите объект YearMonth
.
LocalDate endOfMonth = ym.atEndOfMonth();
Чтобы представить, используйтеDateTimeFormatter
.Либо разрешите создать экземпляр средства форматирования, которое автоматически локализуется в соответствии с указанным Locale
, либо укажите свой собственный шаблон форматирования.Много раз показано во многих других вопросах и ответах о переполнении стека.