/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.time.*;
import java.time.format.*;
import java.time.temporal.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
System.
out.
println ( "Java vendor: " + System.
getProperty ( "java.vendor" ) ); System.
out.
println ( "Java version: " + System.
getProperty ( "java.version" ) );
List<String> strings = new ArrayList<> ();
strings.add ( "2017-01-09T21:49:26.7Z" );
strings.add ( "2017-01-09T21:49:26.70Z" );
strings.add ( "2017-01-09T21:49:26.700Z" );
strings.add ( "2017-01-09T21:49:26.7000Z" );
strings.add ( "2017-01-09T21:49:26.70000Z" );
// Instant.parse
for ( String string
: strings
) { try {
Instant instant = Instant.parse ( string );
System.
out.
println ( "GOOD - string: " + string
+ " parsed: " + instant
); } catch ( DateTimeParseException e ) {
System.
out.
println ( "ERROR - Failed to parse string: " + string
); }
}
System.
out.
println ( "Done with Instant.parse." );
// DateTimeFormatter.ofPattern
DateTimeFormatter f
= DateTimeFormatter.
ofPattern ( "yyyy-MM-dd'T'HH:mm:ss[.SSS]XXX" ,
Locale.
US ); for ( String string
: strings
) { try {
OffsetDateTime odt = OffsetDateTime.parse ( string , f );
System.
out.
println ( "GOOD - string: " + string
+ " parsed: " + odt
); } catch ( DateTimeParseException e ) {
System.
out.
println ( "ERROR - Failed to parse string: " + string
); }
}
System.
out.
println ( "Done with 'DateTimeFormatter.ofPattern'." );
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgppbXBvcnQgamF2YS50aW1lLio7CmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0Lio7CmltcG9ydCBqYXZhLnRpbWUudGVtcG9yYWwuKjsKCgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCAiSmF2YSB2ZW5kb3I6ICIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkgKCAiamF2YS52ZW5kb3IiICkgKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCAiSmF2YSB2ZXJzaW9uOiAiICsgU3lzdGVtLmdldFByb3BlcnR5ICggImphdmEudmVyc2lvbiIgKSApOwoKICAgIExpc3Q8U3RyaW5nPiBzdHJpbmdzID0gbmV3IEFycmF5TGlzdDw+ICgpOwogICAgc3RyaW5ncy5hZGQgKCAiMjAxNy0wMS0wOVQyMTo0OToyNi43WiIgKTsKICAgIHN0cmluZ3MuYWRkICggIjIwMTctMDEtMDlUMjE6NDk6MjYuNzBaIiApOwogICAgc3RyaW5ncy5hZGQgKCAiMjAxNy0wMS0wOVQyMTo0OToyNi43MDBaIiApOwogICAgc3RyaW5ncy5hZGQgKCAiMjAxNy0wMS0wOVQyMTo0OToyNi43MDAwWiIgKTsKICAgIHN0cmluZ3MuYWRkICggIjIwMTctMDEtMDlUMjE6NDk6MjYuNzAwMDBaIiApOwoKICAgICAvLyBJbnN0YW50LnBhcnNlCiAgICBmb3IgKCBTdHJpbmcgc3RyaW5nIDogc3RyaW5ncyApIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBJbnN0YW50IGluc3RhbnQgPSBJbnN0YW50LnBhcnNlICggc3RyaW5nICk7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoICJHT09EIC0gc3RyaW5nOiAiICsgc3RyaW5nICsgIiBwYXJzZWQ6ICIgKyBpbnN0YW50ICk7CiAgICAgICAgfSBjYXRjaCAoIERhdGVUaW1lUGFyc2VFeGNlcHRpb24gZSApIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICggIkVSUk9SIC0gRmFpbGVkIHRvIHBhcnNlIHN0cmluZzogIiArIHN0cmluZyApOwogICAgICAgIH0KICAgIH0KICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoICJEb25lIHdpdGggSW5zdGFudC5wYXJzZS4iICk7CgogICAgLy8gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuCiAgICBEYXRlVGltZUZvcm1hdHRlciBmID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuICggInl5eXktTU0tZGQnVCdISDptbTpzc1suU1NTXVhYWCIgLCBMb2NhbGUuVVMgKTsKICAgIGZvciAoIFN0cmluZyBzdHJpbmcgOiBzdHJpbmdzICkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIE9mZnNldERhdGVUaW1lIG9kdCA9IE9mZnNldERhdGVUaW1lLnBhcnNlICggc3RyaW5nICwgZiApOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCAiR09PRCAtIHN0cmluZzogIiArIHN0cmluZyArICIgcGFyc2VkOiAiICsgb2R0ICk7CiAgICAgICAgfSBjYXRjaCAoIERhdGVUaW1lUGFyc2VFeGNlcHRpb24gZSApIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICggIkVSUk9SIC0gRmFpbGVkIHRvIHBhcnNlIHN0cmluZzogIiArIHN0cmluZyApOwogICAgICAgIH0KICAgIH0KICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoICJEb25lIHdpdGggJ0RhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybicuIiApOwoKCgl9Cn0=