스칼라에서 날짜와 시간으로 작업하는 표준 방법은 무엇입니까? Java 유형을 사용해야합니까, 아니면 기본 스칼라 대안이 있습니까?


161

스칼라에서 날짜와 시간으로 작업하는 표준 방법은 무엇입니까? java.util.Date와 같은 Java 유형을 사용해야합니까, 아니면 기본 스칼라 대안이 있습니까?

답변:


129

Java SE 8부터는 java.time (JSR-310)으로 마이그레이션하라는 메시지가 표시됩니다. scala-time 과 같은 scala를 위해 java.time을 랩핑하는 스칼라 라이브러리를 작성하려는 노력이 있습니다 . SE 8보다 낮은 타겟팅은 다음 중 하나를 사용하십시오. JSR-310이 Joda-Time이 아닌 이유 도 참조하십시오


Joda Time을위한 새로운 스칼라 포장지 . 이 프로젝트는 scala-time이 더 이상 유지되지 않는 것 같아 scala-time에서 분기되었습니다.

import com.github.nscala_time.time.Imports._

DateTime.now // returns org.joda.time.DateTime = 2009-04-27T13:25:42.659-07:00

DateTime.now.hour(2).minute(45).second(10) // returns org.joda.time.DateTime = 2009-04-27T02:45:10.313-07:00

DateTime.now + 2.months // returns org.joda.time.DateTime = 2009-06-27T13:25:59.195-07:00

DateTime.nextMonth < DateTime.now + 2.months // returns Boolean = true

DateTime.now to DateTime.tomorrow  // return org.joda.time.Interval = > 2009-04-27T13:47:14.840/2009-04-28T13:47:14.840

(DateTime.now to DateTime.nextSecond).millis // returns Long = 1000

2.hours + 45.minutes + 10.seconds
// returns com.github.nscala_time.time.DurationBuilder
// (can be used as a Duration or as a Period)

(2.hours + 45.minutes + 10.seconds).millis
// returns Long = 9910000

2.months + 3.days
// returns Period

Joda Time 은 훌륭한 Java 라이브러리이며 Jorge Ortiz가 만든 scala-time 에서 Joda Time에 사용 가능한 Scala 래퍼 / 암시 적 변환 라이브러리가 있습니다. (참고 암시 적에는 성능에 영향이 있지만, 눈치 채면 수행하는 작업에 따라 다릅니다. 성능 문제가 발생하면 Joda 인터페이스로 되돌릴 수 있습니다)

읽어보기에서 :

USAGE:
  import org.scala_tools.time.Imports._

  DateTime.now
  // returns org.joda.time.DateTime = 2009-04-27T13:25:42.659-07:00

  DateTime.now.hour(2).minute(45).second(10)
  // returns org.joda.time.DateTime = 2009-04-27T02:45:10.313-07:00

  DateTime.now + 2.months
  // returns org.joda.time.DateTime = 2009-06-27T13:25:59.195-07:00

  DateTime.nextMonth < DateTime.now + 2.months
  // returns Boolean = true
  DateTime.now to DateTime.tomorrow
  // return org.joda.time.Interval =
  //   2009-04-27T13:47:14.840/2009-04-28T13:47:14.840

  (DateTime.now to DateTime.nextSecond).millis
  // returns Long = 1000

  2.hours + 45.minutes + 10.seconds
  // returns org.scala_tools.time.DurationBuilder
  // (can be used as a Duration or as a Period)

  (2.hours + 45.minutes + 10.seconds).millis
  // returns Long = 9910000 

  2.months + 3.days
  // returns Period

4
비디오 scalaj : 개성있는 스칼라 자바 라이브러리에 대해 래퍼 days2010.scala-lang.org/node/138/164
oluies

고마워요, 나는이 포장지에 대해 몰랐습니다.
Vadim Shender

이 형식의 출력을 얻을 수 없습니다. DateTime.formatted ( "yyyyMMdd")를 사용하면 응답으로 일반 "yyyyMMdd"(문자가 해당 숫자로 대체되지 않음)가 표시됩니다. DateTime.formatted (DateTimeFormat.forPattern ( "yyyyMMdd"))를 사용하면 문자열 인수를 묻는 오류가 발생합니다.
Ivan

1
스칼라 시간이 더 이상 유지되지 않는 것처럼 보이기 때문에 스칼라 시간이 스칼라 2.10과 달리 nscala-time으로 대체되었습니다. github.com/nscala-time/nscala-time 에서 찾을 수 있습니다 .
Sebastian Ganslandt

1
그와 함께 문제를 알아낼 수 없습니다 Importsscala.concurrent.duration._. 대신 일반 JodaTime을 사용하고 자체 자전거를 썼습니다.
kisileno

12

Java 8을 사용하는 경우 nscala더 이상 사용할 필요가 없습니다. Joda-Time 라이브러리가 java.time패키지 (JSR-310) 에서 Java 8로 이동되었습니다 . 해당 패키지를 Scala 프로젝트로 가져 오기만하면됩니다.


1
사실이 아닙니다. Java-8 => 두 개의 다른 API로 전환 할 때 Joda-Time-code를 마이그레이션 / 조정해야합니다!
Meno Hochschild

7

스칼라에서는 날짜를 처리하는 표준 방법 이 없습니다 . 사용 가능한 옵션은 다음과 같습니다.

  1. JODA 시간이 가장 우수하므로 java.time (Java 8을 사용하는 경우)을 사용하십시오. 암시 적 없음.
  2. nscala-time을 사용하십시오.
  3. Lamma 날짜 라이브러리 (현장의 비교적 새로운 라이브러리)

java.util.Date를 둘러싼 잘 문서화 된 문제로 인해 사용하지 않는 것이 좋습니다.


5

자극:

Java Date 및 Calendar 라이브러리가 대부분 부적절합니다. 그것들은 변경 가능하고 스레드 안전하지 않으며 사용하기가 매우 불편합니다.

Joda Time 라이브러리는 Java의 Date 및 Calendar 클래스를 대체합니다. 기본적으로 불변이며 훨씬 풍부하고 좋은 API를 가지고 있으며 필요할 때 Java의 Date 및 Calendar 클래스로 쉽게 변환 할 수 있습니다.

이 프로젝트는 Joda Time 라이브러리 주변에 얇은 편의성을 제공하여 Scala 내에서보다 관용적으로 사용할 수 있도록합니다.

( https://github.com/jorgeortiz85/scala-time 에서 복사 )


3

모든 사람들이 JodaTime을 사용하므로 이러한 Scala 도우미 / 래퍼 라이브러리는 새로운 버전의 Scala로 다시 컴파일해야 할 수도 있습니다. Jodatime은 오랫동안 사용되어 온 유일한 시간 라이브러리이며 안정적이고 모든 스칼라 버전에서 안정적으로 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.