/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
import java.time.* ;
import java.time.temporal.* ;
import java.time.format.* ;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
LocalDate startDate = LocalDate.parse ( "2017-01-15" ) ;
LocalDate stopDate = LocalDate.parse ( "2017-05-27" ) ;
YearMonth start = YearMonth.from ( startDate ) ;
YearMonth stop = YearMonth.from ( stopDate ) ;
int initialCapacity = ( ( int ) ChronoUnit.MONTHS .between ( startDate , stopDate ) ) + 1 ; // Adding one for good measure - I didn't really think out this detail.
List< YearMonth > yms = new ArrayList<> ( initialCapacity ) ;
YearMonth ym = start.plusMonths ( 1 ) ; // Add one, to *not* include the first month.
while ( ym.isBefore ( stop ) ) { // Do *not* include the last month.
yms.add ( ym ) ;
ym = ym.plusMonths ( 1 ) ;
}
System .
out .
println ( "Months between " + startDate
+ " and " + stopDate
+ " = " + yms
) ;
DateTimeFormatter f
= DateTimeFormatter.
ofPattern ( "MMM-uuuu" ,
Locale .
US ) ; for ( YearMonth yearMonth : yms ) {
System .
out .
println ( yearMonth.
format ( f
) ) ; }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgppbXBvcnQgamF2YS50aW1lLiogOwppbXBvcnQgamF2YS50aW1lLnRlbXBvcmFsLiogOwppbXBvcnQgamF2YS50aW1lLmZvcm1hdC4qIDsKCgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoKTG9jYWxEYXRlIHN0YXJ0RGF0ZSA9IExvY2FsRGF0ZS5wYXJzZSggIjIwMTctMDEtMTUiICkgOwpMb2NhbERhdGUgc3RvcERhdGUgPSBMb2NhbERhdGUucGFyc2UoICIyMDE3LTA1LTI3IiApIDsKClllYXJNb250aCBzdGFydCA9IFllYXJNb250aC5mcm9tKCBzdGFydERhdGUgKSA7ClllYXJNb250aCBzdG9wID0gWWVhck1vbnRoLmZyb20oIHN0b3BEYXRlICkgOwoKaW50IGluaXRpYWxDYXBhY2l0eSA9ICggKGludCkgQ2hyb25vVW5pdC5NT05USFMuYmV0d2Vlbiggc3RhcnREYXRlICwgc3RvcERhdGUgKSApICsgMSA7ICAvLyBBZGRpbmcgb25lIGZvciBnb29kIG1lYXN1cmUgLSBJIGRpZG4ndCByZWFsbHkgdGhpbmsgb3V0IHRoaXMgZGV0YWlsLgpMaXN0PCBZZWFyTW9udGggPiB5bXMgPSBuZXcgQXJyYXlMaXN0PD4oIGluaXRpYWxDYXBhY2l0eSApIDsKClllYXJNb250aCB5bSA9IHN0YXJ0LnBsdXNNb250aHMoIDEgKSA7ICAvLyBBZGQgb25lLCB0byAqbm90KiBpbmNsdWRlIHRoZSBmaXJzdCBtb250aC4Kd2hpbGUgKCB5bS5pc0JlZm9yZSggc3RvcCApICkgeyAgICAgICAgIC8vIERvICpub3QqIGluY2x1ZGUgdGhlIGxhc3QgbW9udGguCiAgICB5bXMuYWRkKCB5bSApIDsKICAgIHltID0geW0ucGx1c01vbnRocyggMSApIDsKfQoKU3lzdGVtLm91dC5wcmludGxuKCJNb250aHMgYmV0d2VlbiAiICsgc3RhcnREYXRlICsgIiBhbmQgIiArIHN0b3BEYXRlICsgIiA9ICIgKyB5bXMgKSA7CgpEYXRlVGltZUZvcm1hdHRlciBmID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKCAiTU1NLXV1dXUiICwgTG9jYWxlLlVTICkgOwpmb3IoIFllYXJNb250aCB5ZWFyTW9udGggOiB5bXMgKSB7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4oIHllYXJNb250aC5mb3JtYXQoIGYgKSApIDsKfQoKCgl9Cn0=