$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というのもあるらしいので気が向いたらそっちも使ってみたい。

gitで特定commitの日付を取得する

gitを利用して、特定commitの日付だけ取得したくなることがあったのでやってみた。


git logは--formatで出力形式を指定できる。また--dateオプションで日付形式を指定できる。そして-(数字)オプションでcommit数に制限をかけられる。


これらを利用すると、以下のコマンドでそのcommitの日付のみを取得できる。

$ git log -1 --format='%cd'
Thu Jul 23 17:23:17 2015 +0900

またISO8601形式で出したい場合は

$ git log -1 --date=iso-strict --format='%cd'
2015-07-23T17:23:17+09:00

formatの形式でISO8601を指定することもできる。

$ git log -1 --format='%cI'
2015-07-23T17:23:17+09:00


formatに関してはgit help logのPRETTY FORMATSのところに書いてあるので、色々見ると必要なデータのみを抽出できそうなので、参考になれば。

「チェーン・ポイズン」読んだ

最後にどんでん返しがある小説まとめを見て興味が出たので読んだ。

matome.naver.jp


自分の中では、正直最後のどんでん返しはけっこうおまけという感じで、それよりも途中のキャラクターの心理の変化とか、どんどん次が気になる展開のほうが面白かった。久々にちょっと読んでて気づいたら200ページくらい読んでるみたいな感じになってよかった。


こんなかんじの小説もっと読みたい。