local-time(Common lisp) その2

timestampオブジェクトの操作編

timestamp+ arg1 arg2 arg3

arg1にarg2で指定した分だけ足す。
arg3は:nsec :sec :minute :hour :day :month :yearのどれかを指定してarg2の単位を指定する。
arg1はtimestampオブジェクト。
(timestamp-で引き算)

;14時6分32秒に62分足している。
;返値の日付は適当に付けているだけかな
> (local-time:timestamp+ (local-time:parse-timestring "14:6:32") 62 :minute)
@2000-03-01T15:08:32.000000Z

** timestamp-maximize-part <i>arg1 arg2</i>(&key into)
arg2で指定した部分以下を最大にしたtimestampオブジェクトarg1を返す。
arg2は:nsec :sec :min :hour :day :monthで指定。
キーワード引数として代入を可能にするintoが使える。
 timestamp-minimize-partで最小にしたのを返す。

>|lisp|
> (defvar a (local-time:today))
A

> a
@2013-05-07T00:00:00.000000Z

> (local-time:timestamp-maximize-part a :day)
@2013-05-31T23:59:59.999999Z

> a
@2013-05-07T00:00:00.000000Z

> (local-time:timestamp-maximize-part a :month :into a)
@2013-12-31T23:59:59.999999Z

> a
@2013-12-31T23:59:59.999999Z

adjust-timestamp arg1 (&body・・・)

arg1で指定したtimestampインスタンスをキーワード引数の指示に従って変更・調整する。
キーワード引数は括弧で括って、(arg2 arg3 arg4)の4つの部分に別れる。
arg2はoffset(arg1からの調整)、set(部分的に数値を入れ替える)
arg3は:nsec :sec :sec-of-day :minute :hour :day :day-of-month :month :yearから変更部分を指定
arg4は変更量を指定
ちなみに最後に!を付けると破壊的関数になる。http://www.youtube.com/watch?v=fxcYANsFhB8&list=WLBlhYWB-k_kZzD1OJc375zQAnQlHsgAoL

> a
@2013-12-31T23:59:59.999999Z

> (local-time:adjust-timestamp a (set :hour 3))
@2013-12-31T03:59:59.999999Z

> (local-time:adjust-timestamp a (offset :hour 3))
@2014-01-01T02:59:59.999999Z

timestamp-whole-year-difference arg1 arg2

arg2からarg1までの年数を返す。

> (local-time:timestamp-whole-year-difference (local-time:parse-timestring "1978-08-11")(local-time:parse-timestring "1977-08-12"))
0
> (local-time:timestamp-whole-year-difference (local-time:parse-timestring "1978-08-13")(local-time:parse-timestring "1977-08-12"))
1

days-in-month month year

yearのmonthが何日あるのかを返す。

> (local-time:days-in-month 5 2013)
31

timestamp-difference arg1 arg2

引数で与えられたtaimestampオブジェクトの差を秒数で返す。
マニュアルには載っていない関数。