import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;
class Main {
private static final DateTimeFormatter FORMATTER =
new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.appendPattern("[XXX][XX]")
public static void main
(String[] args
) { String str1
= "2022-03-30T11:22:33.44+04:00"; String str2
= "2022-03-30T11:22:33.44+0400";
// Converting to Instant
System.
out.
println(OffsetDateTime.
parse(str1, FORMATTER
).
toInstant()); System.
out.
println(OffsetDateTime.
parse(str2, FORMATTER
).
toInstant());
// Converting an OffsetDateTime to another OffsetDateTime at UTC
System.
out.
println(OffsetDateTime.
parse(str1, FORMATTER
) .withOffsetSameInstant(ZoneOffset.UTC));
System.
out.
println(OffsetDateTime.
parse(str2, FORMATTER
) .withOffsetSameInstant(ZoneOffset.UTC));
}
}
aW1wb3J0IGphdmEudGltZS5PZmZzZXREYXRlVGltZTsKaW1wb3J0IGphdmEudGltZS5ab25lT2Zmc2V0OwppbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlcjsKaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOwppbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKCmNsYXNzIE1haW4gewoKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIERhdGVUaW1lRm9ybWF0dGVyIEZPUk1BVFRFUiA9IAogICAgICAgIG5ldyBEYXRlVGltZUZvcm1hdHRlckJ1aWxkZXIoKQogICAgICAgICAgICAuYXBwZW5kKERhdGVUaW1lRm9ybWF0dGVyLklTT19MT0NBTF9EQVRFX1RJTUUpCiAgICAgICAgICAgIC5hcHBlbmRQYXR0ZXJuKCJbWFhYXVtYWF0iKQogICAgICAgICAgICAudG9Gb3JtYXR0ZXIoTG9jYWxlLkVOR0xJU0gpOwoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBTdHJpbmcgc3RyMSA9ICIyMDIyLTAzLTMwVDExOjIyOjMzLjQ0KzA0OjAwIjsKICAgICAgICBTdHJpbmcgc3RyMiA9ICIyMDIyLTAzLTMwVDExOjIyOjMzLjQ0KzA0MDAiOwoKICAgICAgICAvLyBDb252ZXJ0aW5nIHRvIEluc3RhbnQKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oT2Zmc2V0RGF0ZVRpbWUucGFyc2Uoc3RyMSwgRk9STUFUVEVSKS50b0luc3RhbnQoKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKE9mZnNldERhdGVUaW1lLnBhcnNlKHN0cjIsIEZPUk1BVFRFUikudG9JbnN0YW50KCkpOwoKICAgICAgICAvLyBDb252ZXJ0aW5nIGFuIE9mZnNldERhdGVUaW1lIHRvIGFub3RoZXIgT2Zmc2V0RGF0ZVRpbWUgYXQgVVRDCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKE9mZnNldERhdGVUaW1lLnBhcnNlKHN0cjEsIEZPUk1BVFRFUikKICAgICAgICAgICAgICAgIC53aXRoT2Zmc2V0U2FtZUluc3RhbnQoWm9uZU9mZnNldC5VVEMpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oT2Zmc2V0RGF0ZVRpbWUucGFyc2Uoc3RyMiwgRk9STUFUVEVSKQogICAgICAgICAgICAgICAgLndpdGhPZmZzZXRTYW1lSW5zdGFudChab25lT2Zmc2V0LlVUQykpOwoKICAgIH0KfQ==