import java.time.LocalDate;
import java.time.chrono.JapaneseDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
/*
プログラミングのお題スレ Part15
//mevius.5ch.net/test/read.cgi/tech/1564310397/521-523
521 名前:さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 投稿日:2019/09/21(土) 20:51:54.21 ID:BmADEcuL [1/3]
お題: 与えられた西暦年月日を年号年月日に変換しなさい。ただし、変換するのは大正時代から令和までとし、範囲外であればERRORを表示しなさい。
522 名前:さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 投稿日:2019/09/21(土) 21:04:33.10 ID:BmADEcuL [2/3]
お題: YYYY/MM/DD形式で与えられた西暦年月日の文字列が正しい年月日を表しているかどうか判定せよ。
523 名前:蟻人間 ◆T6xkBnTXz7B0 [sage] 投稿日:2019/09/21(土) 21:24:10.22 ID:BmADEcuL [3/3]
>>522, >>521の順に解いて下さい。
1970/01/05
1990/12/31
2019/04/28
2019/05/01
1920/02/29
*/
class Ideone
{
static final DateTimeFormatter DATE_PARSE = DateTimeFormatter.ofPattern("yyyy/MM/dd", Locale.JAPAN);
static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("GGGGy年M月d日", Locale.JAPAN);
public static void main(String[] args)
{
String[] list = {
"1970/01/05",
"1990/12/31",
"2019/04/28",
"2019/05/01",
"1920/02/29",
"1920/02/30",
"2019/02/28",
"2019/02/29",
"1912/07/29", // 明治終わり
"1912/07/30", "1926/12/24", // 大正
"1926/12/25", "1989/01/07", // 昭和
"1989/01/08", "2019/04/30", // 平成
"2019/05/01" // 令和
};
for (String s : list)
test(s);
}
static void test(String s)
{
System.out.printf("%s => %s%n", s, isValidDate(s) ? toGengoDateString(s) : "正しくない日付");
}
static boolean isValidDate(String s)
{
LocalDate date = LocalDate.parse(s, DATE_PARSE);
return DATE_PARSE.format(date).equals(s);
}
static String toGengoDateString(String s)
{
try
{
JapaneseDate date = JapaneseDate.from(LocalDate.parse(s, DATE_PARSE));
String ret = DATE_FORMATTER.format(date);
// 明治は範囲外
if (!ret.contains("明治")) return ret;
} catch (Exception e)
{
}
return "ERROR";
}
}
aW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGU7CmltcG9ydCBqYXZhLnRpbWUuY2hyb25vLkphcGFuZXNlRGF0ZTsKaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXI7CmltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwoKCi8qCuODl+ODreOCsOODqeODn+ODs+OCsOOBruOBiumhjOOCueODrCBQYXJ0MTUgCi8vbWV2aXVzLjVjaC5uZXQvdGVzdC9yZWFkLmNnaS90ZWNoLzE1NjQzMTAzOTcvNTIxLTUyMwoKNTIxIOWQjeWJje+8muOBleOBvuOCiOOBiOOCi+ifu+S6uumWkyDil4ZUNnhrQm5UWHo3QjAgW3NhZ2VdIOaKleeov+aXpe+8mjIwMTkvMDkvMjEo5ZyfKSAyMDo1MTo1NC4yMSBJRDpCbUFERWN1TCBbMS8zXQrjgYrpoYw6IOS4juOBiOOCieOCjOOBn+ilv+aapuW5tOaciOaXpeOCkuW5tOWPt+W5tOaciOaXpeOBq+WkieaPm+OBl+OBquOBleOBhOOAguOBn+OBoOOBl+OAgeWkieaPm+OBmeOCi+OBruOBr+Wkp+ato+aZguS7o+OBi+OCieS7pOWSjOOBvuOBp+OBqOOBl+OAgeevhOWbsuWkluOBp+OBguOCjOOBsEVSUk9S44KS6KGo56S644GX44Gq44GV44GE44CCCgo1MjIg5ZCN5YmN77ya44GV44G+44KI44GI44KL6J+75Lq66ZaTIOKXhlQ2eGtCblRYejdCMCBbc2FnZV0g5oqV56i/5pel77yaMjAxOS8wOS8yMSjlnJ8pIDIxOjA0OjMzLjEwIElEOkJtQURFY3VMIFsyLzNdCuOBiumhjDogWVlZWS9NTS9EROW9ouW8j+OBp+S4juOBiOOCieOCjOOBn+ilv+aapuW5tOaciOaXpeOBruaWh+Wtl+WIl+OBjOato+OBl+OBhOW5tOaciOaXpeOCkuihqOOBl+OBpuOBhOOCi+OBi+OBqeOBhuOBi+WIpOWumuOBm+OCiOOAggoKNTIzIOWQjeWJje+8muifu+S6uumWkyDil4ZUNnhrQm5UWHo3QjAgW3NhZ2VdIOaKleeov+aXpe+8mjIwMTkvMDkvMjEo5ZyfKSAyMToyNDoxMC4yMiBJRDpCbUFERWN1TCBbMy8zXQo+PjUyMiwgPj41MjHjga7poIbjgavop6PjgYTjgabkuIvjgZXjgYTjgIIKCjE5NzAvMDEvMDUKMTk5MC8xMi8zMQoyMDE5LzA0LzI4CjIwMTkvMDUvMDEKMTkyMC8wMi8yOQoqLwpjbGFzcyBJZGVvbmUKewogICAgc3RhdGljIGZpbmFsIERhdGVUaW1lRm9ybWF0dGVyIERBVEVfUEFSU0UgICAgID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKCJ5eXl5L01NL2RkIiwgTG9jYWxlLkpBUEFOKTsKICAgIHN0YXRpYyBmaW5hbCBEYXRlVGltZUZvcm1hdHRlciBEQVRFX0ZPUk1BVFRFUiA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybigiR0dHR3nlubRN5pyIZOaXpSIsIExvY2FsZS5KQVBBTik7CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgIHsKICAgICAgICBTdHJpbmdbXSBsaXN0ID0gewogICAgICAgICAgICAgICAgIjE5NzAvMDEvMDUiLAogICAgICAgICAgICAgICAgIjE5OTAvMTIvMzEiLAogICAgICAgICAgICAgICAgIjIwMTkvMDQvMjgiLAogICAgICAgICAgICAgICAgIjIwMTkvMDUvMDEiLAoKICAgICAgICAgICAgICAgICIxOTIwLzAyLzI5IiwKICAgICAgICAgICAgICAgICIxOTIwLzAyLzMwIiwKICAgICAgICAgICAgICAgICIyMDE5LzAyLzI4IiwKICAgICAgICAgICAgICAgICIyMDE5LzAyLzI5IiwKCiAgICAgICAgICAgICAgICAiMTkxMi8wNy8yOSIsIC8vIOaYjuayu+e1guOCj+OCigogICAgICAgICAgICAgICAgIjE5MTIvMDcvMzAiLCAiMTkyNi8xMi8yNCIsIC8vIOWkp+atowogICAgICAgICAgICAgICAgIjE5MjYvMTIvMjUiLCAiMTk4OS8wMS8wNyIsIC8vIOaYreWSjAogICAgICAgICAgICAgICAgIjE5ODkvMDEvMDgiLCAiMjAxOS8wNC8zMCIsIC8vIOW5s+aIkAogICAgICAgICAgICAgICAgIjIwMTkvMDUvMDEiIC8vIOS7pOWSjAogICAgICAgIH07CgogICAgICAgIGZvciAoU3RyaW5nIHMgOiBsaXN0KQogICAgICAgICAgICB0ZXN0KHMpOwogICAgfQoKICAgIHN0YXRpYyB2b2lkIHRlc3QoU3RyaW5nIHMpCiAgICB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIiVzID0+ICVzJW4iLCBzLCBpc1ZhbGlkRGF0ZShzKSA/IHRvR2VuZ29EYXRlU3RyaW5nKHMpIDogIuato+OBl+OBj+OBquOBhOaXpeS7mCIpOwogICAgfQoKICAgIHN0YXRpYyBib29sZWFuIGlzVmFsaWREYXRlKFN0cmluZyBzKQogICAgewogICAgICAgIExvY2FsRGF0ZSBkYXRlID0gTG9jYWxEYXRlLnBhcnNlKHMsIERBVEVfUEFSU0UpOwogICAgICAgIHJldHVybiBEQVRFX1BBUlNFLmZvcm1hdChkYXRlKS5lcXVhbHMocyk7CiAgICB9CgogICAgc3RhdGljIFN0cmluZyB0b0dlbmdvRGF0ZVN0cmluZyhTdHJpbmcgcykKICAgIHsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIEphcGFuZXNlRGF0ZSBkYXRlID0gSmFwYW5lc2VEYXRlLmZyb20oTG9jYWxEYXRlLnBhcnNlKHMsIERBVEVfUEFSU0UpKTsKICAgICAgICAgICAgU3RyaW5nIHJldCA9IERBVEVfRk9STUFUVEVSLmZvcm1hdChkYXRlKTsKCiAgICAgICAgICAgIC8vIOaYjuayu+OBr+evhOWbsuWklgogICAgICAgICAgICBpZiAoIXJldC5jb250YWlucygi5piO5rK7IikpIHJldHVybiByZXQ7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpCiAgICAgICAgewogICAgICAgIH0KICAgICAgICByZXR1cm4gIkVSUk9SIjsKICAgIH0KfQo=