/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.time.*;
import java.math.*;
import java.time.temporal.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
ZoneId z = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdtStart = ZonedDateTime.of ( 2015 , 2 , 21 , 12 , 34 , 56 , 0 , z );
ZonedDateTime zdtStop = ZonedDateTime.of ( 2016 , 3 , 15 , 12 , 34 , 56 , 0 , z );
Period p = Period.between ( zdtStart.toLocalDate () , zdtStop.toLocalDate () );
int years = p.getYears ();
ZonedDateTime zdtStartFractional = zdtStart.plusYears ( years );
Duration fractionalYear = Duration.between ( zdtStartFractional , zdtStop );
ZonedDateTime zdtFractionalYear_StartOfYear = zdtStartFractional.with ( TemporalAdjusters.firstDayOfYear () ).toLocalDate ().atStartOfDay ( z );
Duration wholeYear = Duration.between (zdtFractionalYear_StartOfYear , zdtFractionalYear_StartOfYear.plusYears ( 1 ) );
BigDecimal ratio
= fractionalYearAsNanos.
divide ( wholeYearAsNanos ,
32 , RoundingMode.
HALF_EVEN );
System.
out.
println ( zdtStart
+ "/" + zdtStop
); System.
out.
println ( "Years: " + result.
toPlainString () );
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgppbXBvcnQgamF2YS50aW1lLio7CmltcG9ydCBqYXZhLm1hdGguKjsKaW1wb3J0IGphdmEudGltZS50ZW1wb3JhbC4qOwoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKICAgICAgICBab25lSWQgeiA9IFpvbmVJZC5vZiAoICJBbWVyaWNhL01vbnRyZWFsIiApOwogICAgICAgIFpvbmVkRGF0ZVRpbWUgemR0U3RhcnQgPSBab25lZERhdGVUaW1lLm9mICggMjAxNSAsIDIgLCAyMSAsIDEyICwgMzQgLCA1NiAsIDAgLCB6ICk7CiAgICAgICAgWm9uZWREYXRlVGltZSB6ZHRTdG9wID0gWm9uZWREYXRlVGltZS5vZiAoIDIwMTYgLCAzICwgMTUgLCAxMiAsIDM0ICwgNTYgLCAwICwgeiApOwoKICAgICAgICBQZXJpb2QgcCA9IFBlcmlvZC5iZXR3ZWVuICggemR0U3RhcnQudG9Mb2NhbERhdGUgKCkgLCB6ZHRTdG9wLnRvTG9jYWxEYXRlICgpICk7CiAgICAgICAgaW50IHllYXJzID0gcC5nZXRZZWFycyAoKTsKCiAgICAgICAgWm9uZWREYXRlVGltZSB6ZHRTdGFydEZyYWN0aW9uYWwgPSB6ZHRTdGFydC5wbHVzWWVhcnMgKCB5ZWFycyApOwogICAgICAgIER1cmF0aW9uIGZyYWN0aW9uYWxZZWFyID0gRHVyYXRpb24uYmV0d2VlbiAoIHpkdFN0YXJ0RnJhY3Rpb25hbCAsIHpkdFN0b3AgKTsKICAgICAgICBab25lZERhdGVUaW1lIHpkdEZyYWN0aW9uYWxZZWFyX1N0YXJ0T2ZZZWFyID0gemR0U3RhcnRGcmFjdGlvbmFsLndpdGggKCBUZW1wb3JhbEFkanVzdGVycy5maXJzdERheU9mWWVhciAoKSApLnRvTG9jYWxEYXRlICgpLmF0U3RhcnRPZkRheSAoIHogKTsKICAgICAgICBEdXJhdGlvbiB3aG9sZVllYXIgPSBEdXJhdGlvbi5iZXR3ZWVuICh6ZHRGcmFjdGlvbmFsWWVhcl9TdGFydE9mWWVhciAsIHpkdEZyYWN0aW9uYWxZZWFyX1N0YXJ0T2ZZZWFyLnBsdXNZZWFycyAoIDEgKSApOwoKICAgICAgICBCaWdEZWNpbWFsIGZyYWN0aW9uYWxZZWFyQXNOYW5vcyA9IG5ldyBCaWdEZWNpbWFsICggZnJhY3Rpb25hbFllYXIudG9OYW5vcyAoKSApOwogICAgICAgIEJpZ0RlY2ltYWwgd2hvbGVZZWFyQXNOYW5vcyA9IG5ldyBCaWdEZWNpbWFsICggd2hvbGVZZWFyLnRvTmFub3MgKCkgKTsKICAgICAgICBCaWdEZWNpbWFsIHJhdGlvID0gZnJhY3Rpb25hbFllYXJBc05hbm9zLmRpdmlkZSAoIHdob2xlWWVhckFzTmFub3MgLCAzMiAsIFJvdW5kaW5nTW9kZS5IQUxGX0VWRU4gKTsKICAgICAgICBCaWdEZWNpbWFsIHJlc3VsdCA9IHJhdGlvLmFkZCAoIG5ldyBCaWdEZWNpbWFsICggeWVhcnMgKSApOwoKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCB6ZHRTdGFydCArICIvIiArIHpkdFN0b3AgKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCAiWWVhcnM6ICIgKyByZXN1bHQudG9QbGFpblN0cmluZyAoKSApOwoKICAgIH0KfQ==