/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.Year;
import java.time.YearMonth;
import java.time.ZoneOffset;
import java.time.format.DateTimeParseException;
import java.time.format.DateTimeFormatter;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main
(String[] args
) { String[] strs
= {"2018",
"2010",
"2009",
"2018-03", "2010-02", "2010-03",
"2012-01-05", "2020-03-01", "2020-04-01"};
Instant start = Instant.parse("2010-05-01T00:00:00Z");
Instant end = Instant.parse("2020-03-01T23:59:59.999999999Z");
System.
out.
println(isValid
(str, start, end
)); }
}
public static boolean isValid
(String date, Instant start, Instant end
) { LocalDate sld = start.atOffset(ZoneOffset.UTC).toLocalDate();
LocalDate eld = end.atOffset(ZoneOffset.UTC).toLocalDate();
try {
LocalDate ld = LocalDate.parse(date);
return ld.isAfter(sld) && ld.isBefore(eld);
} catch (DateTimeParseException e) {}
try {
YearMonth ym = YearMonth.parse(date);
return ym.isAfter(YearMonth.from(sld)) && ym.isBefore(YearMonth.from(eld));
} catch (DateTimeParseException e) {}
try {
Year y = Year.parse(date);
return y.isAfter(Year.from(sld)) && y.isBefore(Year.from(eld));
} catch (DateTimeParseException e) {
}
return false;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKaW1wb3J0IGphdmEudGltZS5JbnN0YW50OwppbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZTsKaW1wb3J0IGphdmEudGltZS5ZZWFyOwppbXBvcnQgamF2YS50aW1lLlllYXJNb250aDsKaW1wb3J0IGphdmEudGltZS5ab25lT2Zmc2V0OwppbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZVBhcnNlRXhjZXB0aW9uOwppbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlcjsKCgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBTdHJpbmdbXSBzdHJzID0geyIyMDE4IiwgIjIwMTAiLCAiMjAwOSIsCiAgICAgICAgICAgICAgICAiMjAxOC0wMyIsICIyMDEwLTAyIiwgIjIwMTAtMDMiLAogICAgICAgICAgICAgICAgIjIwMTItMDEtMDUiLCAiMjAyMC0wMy0wMSIsICIyMDIwLTA0LTAxIn07CgogICAgICAgIEluc3RhbnQgc3RhcnQgPSBJbnN0YW50LnBhcnNlKCIyMDEwLTA1LTAxVDAwOjAwOjAwWiIpOwogICAgICAgIEluc3RhbnQgZW5kID0gSW5zdGFudC5wYXJzZSgiMjAyMC0wMy0wMVQyMzo1OTo1OS45OTk5OTk5OTlaIik7CgogICAgICAgIGZvciAoU3RyaW5nIHN0ciA6IHN0cnMpIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGlzVmFsaWQoc3RyLCBzdGFydCwgZW5kKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkKFN0cmluZyBkYXRlLCBJbnN0YW50IHN0YXJ0LCBJbnN0YW50IGVuZCkgewoJICAgIExvY2FsRGF0ZSBzbGQgPSBzdGFydC5hdE9mZnNldChab25lT2Zmc2V0LlVUQykudG9Mb2NhbERhdGUoKTsKCSAgICBMb2NhbERhdGUgZWxkID0gZW5kLmF0T2Zmc2V0KFpvbmVPZmZzZXQuVVRDKS50b0xvY2FsRGF0ZSgpOwoJICAgIHRyeSB7CgkgICAgICAgIExvY2FsRGF0ZSBsZCA9IExvY2FsRGF0ZS5wYXJzZShkYXRlKTsKCSAgICAgICAgcmV0dXJuIGxkLmlzQWZ0ZXIoc2xkKSAmJiBsZC5pc0JlZm9yZShlbGQpOwoJICAgIH0gY2F0Y2ggKERhdGVUaW1lUGFyc2VFeGNlcHRpb24gZSkge30KCQoJICAgIHRyeSB7CgkgICAgICAgIFllYXJNb250aCB5bSA9IFllYXJNb250aC5wYXJzZShkYXRlKTsKCSAgICAgICAgcmV0dXJuIHltLmlzQWZ0ZXIoWWVhck1vbnRoLmZyb20oc2xkKSkgJiYgeW0uaXNCZWZvcmUoWWVhck1vbnRoLmZyb20oZWxkKSk7CgkgICAgfSBjYXRjaCAoRGF0ZVRpbWVQYXJzZUV4Y2VwdGlvbiBlKSB7fQoJCgkgICAgdHJ5IHsKCSAgICAgICAgWWVhciB5ID0gWWVhci5wYXJzZShkYXRlKTsKCSAgICAgICAgcmV0dXJuIHkuaXNBZnRlcihZZWFyLmZyb20oc2xkKSkgJiYgeS5pc0JlZm9yZShZZWFyLmZyb20oZWxkKSk7CgkgICAgfSBjYXRjaCAoRGF0ZVRpbWVQYXJzZUV4Y2VwdGlvbiBlKSB7CgkgICAgfQoJICAgIHJldHVybiBmYWxzZTsKCX0KfQ==