스칼라에서 날짜와 시간으로 작업하는 표준 방법은 무엇입니까? java.util.Date와 같은 Java 유형을 사용해야합니까, 아니면 기본 스칼라 대안이 있습니까?
답변
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
답변
Java 8을 사용하는 경우 nscala
더 이상 사용할 필요가 없습니다. Joda-Time 라이브러리가 java.time
패키지 (JSR-310) 에서 Java 8로 이동되었습니다 . 해당 패키지를 Scala 프로젝트로 가져 오기만하면됩니다.
답변
스칼라에서는 날짜를 처리하는 표준 방법 이 없습니다 . 사용 가능한 옵션은 다음과 같습니다.
- JODA 시간이 가장 우수하므로 java.time (Java 8을 사용하는 경우)을 사용하십시오. 암시 적 없음.
- nscala-time을 사용하십시오.
- Lamma 날짜 라이브러리 (현장의 비교적 새로운 라이브러리)
java.util.Date를 둘러싼 잘 문서화 된 문제로 인해 사용하지 않는 것이 좋습니다.
답변
자극:
Java Date 및 Calendar 라이브러리가 대부분 부적절합니다. 그것들은 변경 가능하고 스레드 안전하지 않으며 사용하기가 매우 불편합니다.
Joda Time 라이브러리는 Java의 Date 및 Calendar 클래스를 대체합니다. 기본적으로 불변이며 훨씬 풍부하고 좋은 API를 가지고 있으며 필요할 때 Java의 Date 및 Calendar 클래스로 쉽게 변환 할 수 있습니다.
이 프로젝트는 Joda Time 라이브러리 주변에 얇은 편의성을 제공하여 Scala 내에서보다 관용적으로 사용할 수 있도록합니다.
답변
모든 사람들이 JodaTime을 사용하므로 이러한 Scala 도우미 / 래퍼 라이브러리는 새로운 버전의 Scala로 다시 컴파일해야 할 수도 있습니다. Jodatime은 오랫동안 사용되어 온 유일한 시간 라이브러리이며 안정적이고 모든 스칼라 버전에서 안정적으로 작동합니다.