[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.7 相対表現の項目

相対表現の項目 (Relative items) は、日付を (指定しない場合は、現在の日付を) 前後に移動させる。また、相対表現の項目の作用は、加算されていく。 相対表現の項目とは、次のようなものである。

 
1 year
1 year ago
3 years
2 days

時間をどれくらい移動するかの単位は、文字列を使って選択する。 まる数年、あるいは、まる数ヶ月ずらすのなら、‘year’ や ‘month’ という文字列を使う。 年も月も、曖昧な単位である。すべての年や月が、同じ長さをしているわけではないからだ。 もっと厳密な単位としては、‘fortnight’ (14 日間)、‘week’ (7 日間)、‘day’ (24 時間)、‘hour’ (60 分間)、‘minute’ または ‘min’ (60 秒間)、‘second’ または ‘sec’ (1 秒間) がある。こうした単位には、複数語尾の ‘s’ を付けてもよいが、付けても無視される。

時間の単位の前に、何倍かを示す乗数を置くことができる。 乗数には、‘+’ または ‘-’ の符号を付けてもよい。 符号なしの数値には、‘+’ の符号が付いているものと見なされる。 数値を指定しなければ、乗数に 1 を指定したことになる。相対表現の項目に ‘ago’ を続けるのは、単位の前にマイナスの乗数を置くのと同じことである。

tomorrow’ という文字列は、1 日分未来ということである (‘day’ と等しい)。‘yesterday’ は、1 日分過去ということだ (‘day ago’ と等しい)。

now’ や ‘today’ という文字列は、値 0 の時間移動に対応する相対表現の項目である。 値 0 の時間移動は、先行する項目によって別の日時に変更されていないかぎり、 今現在の日時を表すということから、‘now’ (今) や ‘today’ (今日) という言い方ができるわけだ。 こうしたものは、他の項目を強調するために、たとえば、‘12:00 today’ といった具合に使うこともできる。‘this’ という文字列にも、値 0 の時間移動という意味があるが、こちらは ‘this thursday’ のような日付文字列で使用される。

相対表現の項目によって生成される日付が、 標準時と夏時間の切り替えを典型とするような、時刻調整の境目を越えたものになる場合、 生成される日時は適切に調整される。

単位の曖昧さが、相対表現の項目では問題を起こすことがある。 たとえば、‘2003-07-31 -1 month’ は、2003-07-01 と評価されるかもしれない。 2003-06-31 が無効な日付だからだ。先月が何月かをもっと確実に引き出すためには、 今月の 15 日よりも前に、先行する月を求めればよい。例を挙げる。

 
$ date -R
Thu, 31 Jul 2003 13:02:39 -0700
$ date --date='-1 month' +'Last month was %B?'
Last month was July?
$ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!'
Last month was June!

また、標準時と夏時間の切り替えのような時刻変更があるときの前後で日付の操作を行う場合も、気を付けた方がよい。 24 時間も加算されたり、減算されたりしてしまうことも、ないとは言えないからだ。 そこで、たいていの場合、日付の計算に取りかかる前に、環境変数 TZ を ‘UTC0’ に設定して、協定世界時を採用するのが賢明である。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on June 7, 2022 using texi2html 1.82.