둘 사이의 차이를 계산하려고합니다 LocalDateTime
.
출력 형식이어야합니다 y years m months d days h hours m minutes s seconds
. 내가 쓴 것은 다음과 같습니다.
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.ZoneId;
public class Main {
static final int MINUTES_PER_HOUR = 60;
static final int SECONDS_PER_MINUTE = 60;
static final int SECONDS_PER_HOUR = SECONDS_PER_MINUTE * MINUTES_PER_HOUR;
public static void main(String[] args) {
LocalDateTime toDateTime = LocalDateTime.of(2014, 9, 9, 19, 46, 45);
LocalDateTime fromDateTime = LocalDateTime.of(1984, 12, 16, 7, 45, 55);
Period period = getPeriod(fromDateTime, toDateTime);
long time[] = getTime(fromDateTime, toDateTime);
System.out.println(period.getYears() + " years " +
period.getMonths() + " months " +
period.getDays() + " days " +
time[0] + " hours " +
time[1] + " minutes " +
time[2] + " seconds.");
}
private static Period getPeriod(LocalDateTime dob, LocalDateTime now) {
return Period.between(dob.toLocalDate(), now.toLocalDate());
}
private static long[] getTime(LocalDateTime dob, LocalDateTime now) {
LocalDateTime today = LocalDateTime.of(now.getYear(),
now.getMonthValue(), now.getDayOfMonth(), dob.getHour(), dob.getMinute(), dob.getSecond());
Duration duration = Duration.between(today, now);
long seconds = duration.getSeconds();
long hours = seconds / SECONDS_PER_HOUR;
long minutes = ((seconds % SECONDS_PER_HOUR) / SECONDS_PER_MINUTE);
long secs = (seconds % SECONDS_PER_MINUTE);
return new long[]{hours, minutes, secs};
}
}
내가 얻는 결과는 29 years 8 months 24 days 12 hours 0 minutes 50 seconds
입니다. 이 웹 사이트 에서 내 결과를 확인했습니다 (값 12/16/1984 07:45:55
및 09/09/2014 19:46:45
). 다음 스크린 샷은 출력을 보여줍니다.
월 값 이후의 필드가 내 코드에서 잘못되어 있다고 확신합니다. 어떤 제안이라도 도움이 될 것입니다.
최신 정보
다른 웹 사이트에서 결과를 테스트했는데 결과가 다릅니다. 여기입니다 : 두 날짜 사이의 계산 기간 (29 년, 3 개월 이십사일 12 시간 0 분 50초 결과).
최신 정보
두 개의 다른 사이트에서 두 개의 다른 결과를 얻었으므로 계산 알고리즘이 합법적인지 궁금합니다. 다음 두 LocalDateTime
객체를 사용하는 경우 :
LocalDateTime toDateTime = LocalDateTime.of(2014, 9, 10, 6, 40, 45);
LocalDateTime fromDateTime = LocalDateTime.of(1984, 12, 16, 7, 45, 55);
그런 다음 출력이오고 있습니다 : 29 years 8 months 25 days -1 hours -5 minutes -10 seconds.
이 링크에서 이어야합니다 29 years 8 months 24 days 22 hours, 54 minutes and 50 seconds
. 따라서 알고리즘은 음수도 처리해야합니다.
질문은 어떤 사이트가 어떤 결과를 주 었는지에 대한 것이 아니며 올바른 알고리즘을 알아야하며 올바른 결과가 필요합니다.
7:45:55
과 종료 시간 19:46:45
(또는 7:46:45
PM)이 표시됩니다. 따라서 두 시간의 차이는 12 시간 0 분 50 초이며 절대 23 시간 34 분 12 초입니다. 따라서 계산 실제는 적어도 시간 부분에서 올바른 것으로 보입니다.
LocalDateTime
시간 영역이없는, 독특한 대답이되지 않을 수 있습니다. 시작 및 종료 시간대가 동일하다고 가정하더라도 2014-09-09와 같은 특정 시간대의 날짜는 일광 절약 시간 또는 서머 타임이며 다른 시간대는 그렇지 않습니다. 시간이 지나면 물건을 버릴 수 있습니다. 따라서 이것이 해결되지 않으면 초와의 차이를 계산하는 것은 의미가 없습니다.
LocalDateTime
클래스가 의도적으로 어떤 시간대의 개념이나 오프셋에서-UTC 부족으로, 비현실적인 결과를 얻을 수 있습니까? 현실적인 값을 얻으 ZoneId
려면을 통해 시간대를 할당하십시오 ZonedDateTime
.
Period.between()
반올림을 적용 할 수 있습니까?