Java 周期和持续时间之间的微妙之处
我不确定我是否理解Java和.Period
Duration
当我阅读Oracle的解释时,它说我可以找出自这样的生日以来多少天(使用他们使用的示例日期):
LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);
Period birthdayPeriod = Period.between(birthday, today);
int daysOld = birthdayPeriod.getDays();
但正如他们所指出的那样,这并没有考虑到你出生的时区和你现在所在的时区。但这是一台计算机,我们可以精确,对吧?那么我会使用?Duration
ZoneId bornIn = ZoneId.of("America/New_York");
ZonedDateTime born = ZonedDateTime.of(1960, Month.JANUARY.getValue(), 1, 2, 34, 56, 0, bornIn);
ZonedDateTime now = ZonedDateTime.now();
Duration duration = Duration.between(born, now);
long daysPassed = duration.toDays();
现在实际时间是准确的,但是如果我理解正确,天可能不能正确表示日历日,例如DST等。
那么,我该怎么做才能根据我的时区获得准确的答案呢?我唯一能想到的就是回到 使用 ,但首先从值中规范化时区,然后使用 .LocalDate
ZonedDateTime
Duration
ZoneId bornIn = ZoneId.of("America/New_York");
ZonedDateTime born = ZonedDateTime.of(1960, Month.JANUARY.getValue(), 1, 2, 34, 56, 0, bornIn);
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime nowNormalized=now.withZoneSameInstant(born.getZone());
Period preciseBirthdayPeriod = Period.between(born.toLocalDate(), nowNormalized.toLocalDate());
int preciseDaysOld = preciseBirthdayPeriod.getDays();
但这似乎真的很复杂,只是为了得到一个准确的答案。