program story

새로운 Java 8 날짜 시간 API에 나노초 정밀도가없는 이유는 무엇입니까?

inputbox 2020. 10. 26. 07:57
반응형

새로운 Java 8 날짜 시간 API에 나노초 정밀도가없는 이유는 무엇입니까?


이 질문에 이미 답변이 있습니다.

Java 8의 새로운 Date Time API 기능 중 하나는 나노초 정밀도입니다. 그러나 현재 날짜 시간을 콘솔에 인쇄하면

DateTimeFormatter formatter = DateTimeFormatter
    .ofPattern("yyyy-MM-dd'T'HH:mm:ss,nnnnnnnnnZ");
System.out.println(OffsetDateTime.now().format(formatter)); 

밀리 초 정밀도 만 표시됩니다. 2015-11-02T12 : 33 : 26,746000000 + 0100

운영 체제는 나노초 정밀도를 지원하는 것 같습니다. 터미널을 통해 현재 날짜 시간을 인쇄 할 때

date -Ins

2015-11-02T12 : 33 : 26,746134417 + 0100 참조

Java에서 나노초 정밀도를 얻으려면 어떻게해야합니까? Ubuntu 14.04 64 비트에서 Oracle Java 1.8.0_66을 실행하고 있습니다.


java.time일반적으로 API는 않습니다 나노초 정밀도를 가지고있다. 예를 들면 :

DateTimeFormatter formatter = DateTimeFormatter
    .ofPattern("yyyy-MM-dd'T'HH:mm:ss,nnnnnnnnnZ");
OffsetDateTime odt = OffsetDateTime.of(2015, 11, 2, 12, 38, 0, 123456789, ZoneOffset.UTC);
System.out.println(odt.format(formatter));

산출:

2015-11-02T12:38:00,123456789+0000

그러나 OffsetDateTime.now()밀리 초 만있는 값을 반환하는 시계 값 입니다.

에서 Clock자바 8 구현 :

여기에 제공된 시계 구현은 System.currentTimeMillis(). 이 방법은 시계의 정확성에 대해 거의 또는 전혀 보장하지 않습니다. 보다 정확한 클럭이 필요한 애플리케이션은 NTP 서버와 같은 다른 외부 클럭을 사용하여이 추상 클래스를 구현해야합니다.

단지 기본 구현 - 그래서 본질적으로 부정확 여기 아무것도 없다 Clock사용 System.currentTimeMillis(). 잠재적으로 더 정확한 하위 클래스를 만들 수 있습니다. 그러나 더 추가하지 않고 그 추가 더 정밀도를주의해야한다 정확성을 아마 정말 유용하지 않습니다. (그럴 수있는 때가 있습니다. 물론 ...)


Jon Skeet의 답변에 중요한 추가 기능을 추가하기 위해 Java 9는 향상된 정밀도로 시계를 제공해야합니다 . 버그 로그를 참조하십시오 . 배경 : 많은 운영 체제 (특히 Linux)에서 더 나은 클럭을 사용할 수 있습니다.

java.time.Clock에 대한 Java SE 8 사양은 "시스템 팩토리 메소드는 사용 가능한 최상의
시스템 시계를 기반으로 시계를 제공합니다 . System.currentTimeMillis () 또는 사용 가능한 경우 더 높은 해상도 시계를 사용할 수 있습니다."라고 명시되어 있습니다. JDK 8에서
반환 된 클럭 의 구현 은 System.currentTimeMillis ()를 기반으로 했으므로 밀리 초 단위의 해상도 만 있습니다. JDK 9에서 구현
은 System.currentTimeMillis ()가 사용하는 기본 기본 클록을 기반으로하여 해당 클록에서 사용할 수있는 최대 해상도를 제공합니다. 대부분의 시스템에서 이는 마이크로 초 또는 때로는 10 분의 1 마이크로 초일 수 있습니다.

이러한 시스템 팩토리 메서드에 의해 반환 된 클럭이 항상 밀리 초의 정밀도를 가지며 이에 적극적으로 의존한다고 가정하는 애플리케이션
은 API 명시된 것처럼 더 큰 해상도의 가능성을 고려하기 위해 업데이트해야 할 수 있습니다. 선적 서류 비치.

두 번째 정밀도가 윤초 근처에 존재하지 않는다는 (이국적인) 사실도 주목해야합니다. Java 9에서도 마찬가지입니다.

참고 URL : https://stackoverflow.com/questions/33477695/why-does-the-new-java-8-date-time-api-not-have-nanosecond-precision

반응형