1. ホーム
  2. datetime

[解決済み] Scalaで日付や時刻を扱う標準的な方法は何ですか?Java型を使うべきか、それともScalaのネイティブな代替手段があるのか?

2022-04-24 18:49:02

質問

Scalaで日付や時刻を扱う標準的な方法は何ですか?java.util.DateのようなJavaの型を使うべきでしょうか、それともScalaのネイティブな代替手段があるのでしょうか?

どのように解決するのですか?

Java SE 8以降では、java.time(JSR-310)への移行が求められています。java.timeをscala用にラッピングしたscalaライブラリを作成する取り組みが行われています。 スカラタイム . SE 8 未満をターゲットとする場合は、以下のいずれかを使用してください。また、以下を参照してください。 JSR-310がJoda-Timeでない理由

すごいぞscala 人気のあるScalaのDateTimeのAPIを多数掲載しています。


Joda Time の新しい Scala ラッパーです。 . このプロジェクトは 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

ジョダ時間 は優れた Java ライブラリですが、Joda Time 用の Scala ラッパー/暗黙の変換ライブラリが以下のサイトにあります。 スカラタイム 作成者 ホルヘ・オルティス . (インプリシットにはパフォーマンス上の問題があることに注意してください。) しかし、あなたが気づくかどうかは、あなたが何をするかによります。そして、もしパフォーマンスの問題にぶつかったら、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