Scalaで日付と時刻を処理する標準的な方法は何ですか? Java.util.DateなどのJava型を使用する必要がありますか、それともネイティブのScala代替がありますか?
Java SE 8以降、ユーザーはJava.time(JSR-310)に移行するよう求められます。 scala-time など、scalaのJava.timeをラップするscalaライブラリを作成する努力があります。 SE 8よりも低いターゲットを設定する場合は、次のいずれかを使用します。 も参照してくださいJSR-310がJoda-Timeではない理由
Joda Timeの新しいScalaラッパー 。このプロジェクトは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ライブラリで、Jodaで利用可能なScalaラッパー/暗黙の変換ライブラリがあります scala-time の時間 Jorge Ortiz によって作成されました。 (暗黙的にパフォーマンスが低下することに注意してください。ただし、気付くかどうかによって異なります。パフォーマンスの問題が発生した場合は、Jodaインターフェースに戻ることができます)
READMEから:
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プロジェクトにインポートするだけです。
Scalaで日付を操作する標準の方法はありません。利用可能なオプションは次のとおりです。
Java.util.Dateを使用することは、それを取り巻く十分に文書化された問題のために使用することを避けます。
動機:
Java DateおよびCalendarライブラリは、ほとんど不十分です。それらは変更可能で、スレッドセーフではなく、使用するのに非常に不便です。
Joda Timeライブラリは、JavaのDateクラスとCalendarクラスの優れた代替品です。デフォルトでは不変であり、より豊富で優れたAPIを備えており、必要に応じてJavaのDateクラスとCalendarクラスに簡単に変換できます。
このプロジェクトは、Joda Timeライブラリの周囲に利便性の薄いレイヤーを提供し、Scala内での使用をより慣用的にします。
誰もがJodaTimeを使用しています。これらのScalaヘルパー/ラッパーライブラリは、Scalaの新しいバージョンで再コンパイルする必要がある場合があります。 Jodatimeは、長い間使用されている唯一のタイムライブラリであり、安定しており、Scalaのすべてのバージョンで確実に動作します。