local-time(Common lisp) その1インスタンスを作る編

Common Lispで時間を扱う時に重宝するライブラリlocal-timeについて調べた事をメモ。

timestampインスタンスを作る編

universal-to-timestamp arg

1900-01-01T00:00:00Zからarg秒経過したtimestampクラスのインスタンスを返す。
似たような関数にunix-to-timestampがあり、こちらは1970-01-01T00:00:00Z. を基準にしたインスタンスを作る。

; 1900-01-01より1日経過したインスタンスを返す。
* (local-time:universal-to-timestamp (* 1 24 60 60))

@1900-01-02T00:00:00.000000Z
now today

nowは現在日時、todayは現在の日付のtimestampクラスのインスタンスを返す。
ちなみにsbclだとnow使用時、マイクロ秒単位まで記録してくれます。

encode-timestamp nsec sec minute hour day month year

引数で指定した日時のtimestampインスタンスを返す。

;2013年5月7日3時40分12秒のtimestamインスタンスを作る
* (local-time:encode-timestamp 0 12 40 3 7 5 2013)

@2013-05-07T03:40:12.000000Z

キーワード引数:offset sec
必須引数で指定した日時から指定したsec秒だけ遡った日時を返す。

;上より10秒前のtimestampインスタンスを作る(必須引数は上と同じ)
* (local-time:encode-timestamp 0 12 40 3 7 5 2013 :offset 10)

@2013-05-07T03:40:02.000000Z

キーワード引数:into arg
argで指定した変数にインスタンスを代入する

;現在時刻のインスタンスを変数nowに代入
* (defvar now (local-time:now))

NOW

;nowの確認
* now

@2013-05-06T18:58:31.889179Z

;645年1月1日12時0分をnowに代入
* (local-time:encode-timestamp 0 0 0 12 1 1 645 :into now)

@0645-01-01T12:00:00.000000Z
;nowの確認
* now

@0645-01-01T12:00:00.000000Z

parse-timestring arg

argで与えた文字列を元にtimestampインスタンスを返す。

> (local-time:parse-timestring "2015-05-23T14:6:32Z")
@2015-05-23T14:06:32.000000Z

timestamp-minimum arg1 arg2・・・

与えられたタイムスタンプインスタンスの中で最小の物を返す。
timestamp-maximumで最大の物を返す。