$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

scalaで時間操作メモ

scalaの時間操作をする方法についてメモ。

joda-timeというJavaのライブラリがあるので、それを利用する。

依存を追加

libraryDependenciesにjoda-timeを追加。さらにjoda-convertを追加しておかないと、コンパイル時にwarningsが出るので一緒に追加しておく。この辺はアノテーション周りで何かあるらしいけどまだ深追いしていない。

libraryDependencies ++= Seq(
  "joda-time" % "joda-time" % "2.7",
  "org.joda" % "joda-convert" % "1.7",
)

timestampからDateTime型を作成

よくやるのがtimestampからDateTime型を作成。timestampはIntの範囲に収まるが、DateTimeを作るときのtimestampはmsecのため、Intの範囲に収まらない。このため、キャストしてあげないと正しく動作しないので注意。

import org.joda.time.DateTime
val timestamp = 1437956468;
val dt = new DateTime(timestamp * 1000L)

またこの時にタイムゾーンを指定する場合はこんな感じ。

import org.joda.time.DateTime
import org.joda.time.DateTimeZone
val timestamp = 1437956468;
val dt = new DateTime(timestamp * 1000L, DateTimeZone.UTC)

DateTime型を文字列で出力する

DateTime型はDateTimeFormatを利用して様々な形式に出力できる。どんなフォーマット型があるかとか調べるのは面倒なので、DateTimeFormat.forPatternを利用した。

import org.joda.time.DateTime
import org.joda.time.DateTimeZone
import org.joda.time.format.DateTimeFormat
val timestamp = 1437956468;
val dt = new DateTime(timestamp * 1000L, DateTimeZone.UTC)
val fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss")
fmt.print(dt)

逆にparseしたい場合はこんな感じ。

val dt = fmt.parseDateTime("2015-07-27T00:21:08")

まとめ

今回はscalaの時間操作で自分のやってみたことのメモをした。scalaの時間操作はnscala-timeというのもあるらしいので気が向いたらそっちも使ってみたい。