/* 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.*;
import java.time.zone.*;
import java.util.concurrent.*;
import java.math.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
OffsetDateTime epochCalendarNewStyleActOf1750 = LocalDate.of ( 1752 , Month.SEPTEMBER , 14 ).atStartOfDay ().atOffset ( ZoneOffset.UTC );
String input
= "95906.27600694445"; long days = bd.toBigInteger ().longValue ();
BigDecimal fractionOfADay
= bd.
subtract ( new BigDecimal ( days
) ); // Extract the fractional number, separate from the integer number. BigDecimal secondsFractional
= new BigDecimal ( TimeUnit.
DAYS.
toSeconds ( 1 ) ).
multiply ( fractionOfADay
); long secondsWhole = secondsFractional.longValue ();
long nanos
= secondsFractional.
subtract ( new BigDecimal ( secondsWhole
) ).
multiply ( new BigDecimal ( 1_000_000_000L
) ).
longValue (); Duration duration = Duration.ofDays ( days ).plusSeconds ( secondsWhole ).plusNanos ( nanos );
OffsetDateTime odt = epochCalendarNewStyleActOf1750.plus ( duration );
Instant instant = odt.toInstant();
System.
out.
println ( "bd: " + bd
); System.
out.
println ( "days: " + days
); System.
out.
println ( "fractionOfADay.toString(): " + fractionOfADay
); System.
out.
println ( "secondsFractional: " + secondsFractional
); System.
out.
println ( "secondsWhole: " + secondsWhole
); System.
out.
println ( "nanos: " + nanos
); System.
out.
println ( "duration.toString(): " + duration
); System.
out.
println ( "duration.toDays(): " + duration.
toDays () ); System.
out.
println ( "odt.toString(): " + odt
); System.
out.
println ( "instant.toString(): " + instant
);
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgppbXBvcnQgamF2YS50aW1lLio7CmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0Lio7CmltcG9ydCBqYXZhLnRpbWUudGVtcG9yYWwuKjsKaW1wb3J0IGphdmEudGltZS56b25lLio7CmltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC4qOwoKaW1wb3J0IGphdmEubWF0aC4qOwoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCiAgICBPZmZzZXREYXRlVGltZSBlcG9jaENhbGVuZGFyTmV3U3R5bGVBY3RPZjE3NTAgPSBMb2NhbERhdGUub2YgKCAxNzUyICwgTW9udGguU0VQVEVNQkVSICwgMTQgKS5hdFN0YXJ0T2ZEYXkgKCkuYXRPZmZzZXQgKCBab25lT2Zmc2V0LlVUQyApOwoKICAgIFN0cmluZyBpbnB1dCA9ICI5NTkwNi4yNzYwMDY5NDQ0NSI7CiAgICBCaWdEZWNpbWFsIGJkID0gbmV3IEJpZ0RlY2ltYWwgKCBpbnB1dCApOwogICAgbG9uZyBkYXlzID0gYmQudG9CaWdJbnRlZ2VyICgpLmxvbmdWYWx1ZSAoKTsKICAgIEJpZ0RlY2ltYWwgZnJhY3Rpb25PZkFEYXkgPSBiZC5zdWJ0cmFjdCAoIG5ldyBCaWdEZWNpbWFsICggZGF5cyApICk7IC8vIEV4dHJhY3QgdGhlIGZyYWN0aW9uYWwgbnVtYmVyLCBzZXBhcmF0ZSBmcm9tIHRoZSBpbnRlZ2VyIG51bWJlci4KICAgIEJpZ0RlY2ltYWwgc2Vjb25kc0ZyYWN0aW9uYWwgPSBuZXcgQmlnRGVjaW1hbCAoIFRpbWVVbml0LkRBWVMudG9TZWNvbmRzICggMSApICkubXVsdGlwbHkgKCBmcmFjdGlvbk9mQURheSApOwogICAgbG9uZyBzZWNvbmRzV2hvbGUgPSBzZWNvbmRzRnJhY3Rpb25hbC5sb25nVmFsdWUgKCk7CiAgICBsb25nIG5hbm9zID0gc2Vjb25kc0ZyYWN0aW9uYWwuc3VidHJhY3QgKCBuZXcgQmlnRGVjaW1hbCAoIHNlY29uZHNXaG9sZSApICkubXVsdGlwbHkgKCBuZXcgQmlnRGVjaW1hbCAoIDFfMDAwXzAwMF8wMDBMICkgKS5sb25nVmFsdWUgKCk7CiAgICBEdXJhdGlvbiBkdXJhdGlvbiA9IER1cmF0aW9uLm9mRGF5cyAoIGRheXMgKS5wbHVzU2Vjb25kcyAoIHNlY29uZHNXaG9sZSApLnBsdXNOYW5vcyAoIG5hbm9zICk7CgogICAgT2Zmc2V0RGF0ZVRpbWUgb2R0ID0gZXBvY2hDYWxlbmRhck5ld1N0eWxlQWN0T2YxNzUwLnBsdXMgKCBkdXJhdGlvbiApOwogICAgCiAgICBJbnN0YW50IGluc3RhbnQgPSBvZHQudG9JbnN0YW50KCk7CgogICAgU3lzdGVtLm91dC5wcmludGxuICggImJkOiAiICsgYmQgKTsKICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoICJkYXlzOiAiICsgZGF5cyApOwogICAgU3lzdGVtLm91dC5wcmludGxuICggImZyYWN0aW9uT2ZBRGF5LnRvU3RyaW5nKCk6ICIgKyBmcmFjdGlvbk9mQURheSApOwogICAgU3lzdGVtLm91dC5wcmludGxuICggInNlY29uZHNGcmFjdGlvbmFsOiAiICsgc2Vjb25kc0ZyYWN0aW9uYWwgKTsKICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoICJzZWNvbmRzV2hvbGU6ICIgKyBzZWNvbmRzV2hvbGUgKTsKICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoICJuYW5vczogIiArIG5hbm9zICk7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCAiZHVyYXRpb24udG9TdHJpbmcoKTogIiArIGR1cmF0aW9uICk7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCAiZHVyYXRpb24udG9EYXlzKCk6ICIgKyBkdXJhdGlvbi50b0RheXMgKCkgKTsKICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoICJvZHQudG9TdHJpbmcoKTogIiArIG9kdCApOwogICAgU3lzdGVtLm91dC5wcmludGxuICggImluc3RhbnQudG9TdHJpbmcoKTogIiArIGluc3RhbnQgKTsKICAgIAogICAgCgl9Cn0=