programing

Java 날짜 및 시간 클래스를 사용할까요, 아니면 Joda Time과 같은 서드파티 라이브러리를 사용할까요?

newsource 2022. 9. 22. 00:25

Java 날짜 및 시간 클래스를 사용할까요, 아니면 Joda Time과 같은 서드파티 라이브러리를 사용할까요?

세계 각국에서 사용할 수 있는 웹 기반 시스템을 만들고 있습니다.저장해야 하는 데이터 유형 중 하나는 날짜와 시간입니다.

Joda time 등 서드파티 라이브러리와 비교하여 Java 날짜 및 시간 클래스를 사용할 때의 장단점은 무엇입니까?이런 서드파티 도서관이 존재하는 데는 이유가 있겠지만, 실제로 비교한 적은 없습니다.

편집: Java 8이 출시되었으므로 사용할 수 있다면 그렇게 하십시오. java.time조다 타임보다 깨끗하다고 생각합니다.하지만 자바-8 이전 상태로 갇혀 있다면, 계속 읽어보십시오...

맥스가 조다 사용에 대한 장단점을 물어봤는데...

장점:

  • 아주 잘 작동한다.Joda에는 표준 Java 라이브러리보다 버그가 훨씬 적다고 생각합니다.Java 라이브러리의 일부 버그는 설계상 수정이 매우 어렵습니다(불가능하지는 않더라도).
  • 이 가이드는 '현지 시간'(예를 들어 '내가 어디에 있든 오전 7시에 깨워줘')과 '순간'의 개념을 구분하여 날짜/시간 처리에 대해 올바르게 생각하도록 설계되었습니다(PST 기준으로 오후 3시에 James에게 전화합니다.James가 있는 곳은 오후 3시가 아닐 수도 있지만, 같은 순간입니다).
  • 비교적 자주 변경되는 시간대 데이터베이스를 쉽게 갱신할 수 있다고 생각합니다.
  • 불변의 스토리가 좋기 때문에 IME의 생활이 훨씬 쉬워집니다.
  • 불변성을 수반하는 모든 포메터는 스레드 세이프입니다.이것은, 애플리케이션을 개입시켜 1개의 포메터를 재이용하는 것이 거의 항상 필요하기 때문입니다.
  • 학습에 앞서게 될 것이다.java.time자바8에서는 적어도 어느 정도 비슷하기 때문에

단점:

  • 또 하나의 API를 배울 수 있습니다(다만, 문서는 꽤 훌륭합니다).
  • 구축 및 도입해야 할 또 다른 라이브러리입니다.
  • Java 8을 사용하는 경우 스킬을 이행하기 위한 작업이 아직 남아 있습니다.
  • 를 사용하지 못했습니다.DateTimeZoneBuilder과거에 효과적으로.이것은 매우 드문 사용 사례입니다.

자신의 작은 API를 효과적으로 구축하려는 oxbow_lakes의 아이디어에 대응하기 위해 이것이 왜 나쁜 아이디어인지에 대한 나의 견해는 다음과 같다.

  • 일 때문이에요.이미 해줬는데 왜 효과가 있는 거죠?
  • 당신의 팀에 처음 온 사람은 당신의 자작 API보다 Joda에 더 익숙할 것입니다.
  • 가장 단순한 용도 이외에 다른 용도로 잘못 사용할 수 있습니다.그리고 처음에는 단순한 기능만 필요하다고 생각했을지라도, 이러한 것들은 한 번에 조금씩 더 복잡해지는 경향이 있습니다.날짜와 시간을 적절하게 조작하는 것은 어렵다.또한 내장된 Java API는 제대로 사용하기 어렵습니다. 캘린더 API의 날짜/시간 연산이 어떻게 이루어지는지 규칙을 보십시오.처음부터 잘 디자인된 라이브러리를 사용하는 것보다 이것들 위에 무엇이든 짓는 것은 좋지 않은 생각이다.

Java 8을 기다릴 생각이 아니라면 날짜와 시간을 조작하기 위해 더 나은 API를 구현해 주길 바랍니다.그것은 시간을 절약하고 많은 두통을 피할 수 있다.

정답은 다음과 같습니다.

JODA(및 JSR-310)는, 복수의 캘린더 시스템에서의 사용을 서포트하는 등, 완전하게 기능하는 날짜/시간 라이브러리입니다.

개인적으로 JODA는 내가 필요로 하는 것에 대해 복잡함 면에서 너무 멀리 있다는 것을 알았다. 주요(Java) 2가지 오류(IMHO)Date ★★★★★★★★★★★★★★★★★」Calendar츠키다

  1. 그들은 변하기 쉽다.
  2. 즉석에서 1년-월-일의 개념을 혼재시키고 있습니다.

JODA의 .YearMonthDay ★★★★★★★★★★★★★★★★★」Instant두 가지 모두 실제 "비교적" 계산에 후드 아래의 Java 클래스를 사용합니다.그러면 100개 이상의 클래스 API, 다른 포맷/파싱 메커니즘 등에 익숙해질 필요가 없습니다.

물론, 다른 연대기(히브리어 등)의 완전한 표현이 필요한 경우나, 상상 속의 캘린더 시스템(예를 들어 쓰고 있는 게임의 경우)을 정의할 수 있는 경우라면, JODA 또는 JRS-310이 적합합니다.그렇지 않다면 직접 굴리는 것이 좋은 방법일 수도 있습니다.

JSR-310 스펙 리드는 JODA를 쓴 Stephen Colebourne이므로 논리적으로 JODA를 대체할 것입니다.

데이트 상대는 어떻게 하느냐에 달렸어요.단순히 유지한다면 Java에 내장된 Dates는 원하는 대로 사용할 수 있을 것입니다.하지만 광범위한 날짜 조작을 하고 있다면 Joda와 함께 있는 것이 더 나을 것입니다.

Joda-Time 라이브러리를 사용해야 하는 이유는 다음과 같습니다.

  1. Joda-Time은 ISO 8601 표준을 지원합니다. 이는 표준적인 방법으로
    날짜 표시
  2. Joda-Time에서는 java.util.date보다 일/월/년을 더하고 빼는 것이 더 쉽습니다.
  3. Joda-Time에서는 주어진 날짜에 의한 초기화가 훨씬 쉽습니다.
  4. Joda-Time은 시간대도 지원합니다.
  5. 조다 타임같은 : "2014-02-31"Exception in thread "main" org.joda.time.IllegalFieldValueException: Cannot parse "2014-02-31": Value 31 for dayOfMonth must be in the range [1,28].

상세한 것에 대하여는, 다음의 페이지를 참조해 주세요.http://swcodes.blogspot.com/

언급URL : https://stackoverflow.com/questions/589870/should-i-use-java-date-and-time-classes-or-go-with-a-3rd-party-library-like-joda