Oct 17, 2008

[Linux] GNU date コマンドで来月の日付を取得する方法をメモ

GNU date コマンドで来月の日付を取得する方法をメモしておく。 使用した GNU date コマンドのバージョンは以下の通り。

$ date --version
date (coreutils) 5.2.1
Written by David MacKenzie.

Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[参考訳]
これはフリーソフトウェアです. コピーの条件についてはソースをお読みください.
市場性及び特定目的適合性の如何によらず, いかなる保証もありません.

1 年後、1 年前などの日付を取得するには "year" もしくは "years" が使用できる。

$ date +"%Y%m%d" --date "1 year"
20091017
$ date +"%Y%m%d" --date "1 years"
20091017
$ date +"%Y%m%d" --date "10 years"
20181017
$ date +"%Y%m%d" --date "1 year ago"
20071017
$ date +"%Y%m%d" --date "1 years ago"
20071017
$ date +"%Y%m%d" --date "10 years ago"
19981017

1 ヶ月後、1 ヶ月前などの日付を取得するには "month" もしくは "months" が使用できる。

$ date +"%Y%m%d" --date "1 month"
20081117
$ date +"%Y%m%d" --date "1 months"
20081117
$ date +"%Y%m%d" --date "10 month"
20090817
$ date +"%Y%m%d" --date "1 month ago"
20080917
$ date +"%Y%m%d" --date "1 months ago"
20080917
$ date +"%Y%m%d" --date "10 month ago"
20071217

1 週間後、1 週間前などの日付を取得するには "week" もしくは "weeks" が使用できる。

$ date +"%Y%m%d" --date "1 week"
20081024
$ date +"%Y%m%d" --date "1 weeks"
20081024
$ date +"%Y%m%d" --date "10 weeks"
20081226
$ date +"%Y%m%d" --date "1 week ago"
20081010
$ date +"%Y%m%d" --date "1 weeks ago"
20081010
$ date +"%Y%m%d" --date "10 weeks ago"
20080808

1 日後、1 日前などの日付を取得するには "day" もしくは "days" が使用できる。

$ date +"%Y%m%d" --date "1 day"
20081018
$ date +"%Y%m%d" --date "1 days"
20081018
$ date +"%Y%m%d" --date "200 days"
20090505
$ date +"%Y%m%d" --date "1 day ago"
20081016
$ date +"%Y%m%d" --date "1 days ago"
20081016
$ date +"%Y%m%d" --date "300 days ago"
20071222

その他(時間、分、秒)

時間であれば "hour", "hours"、分であれば "minute", "minutes"、秒であれば "second", "seconds" で上記と同様のことができる。

`man date` より関連部分を抜粋

date(1)

名前
       date - システムの日付と時刻を表示・設定する

書式
       date  [-uR]  [-d  datestr]  [-f  datefile]  [-r file] [-s datestr] [-I
       [timespec]] [--date=datestr] [--file=datefile] [--iso-8601[=timespec]]
       [--reference=file]  [--set=datestr]  [--rfc-822] [--universal] [--utc]
       [+format] [MMDDhhmm[[CC]YY][.ss]]

       date [--help] [--version]

  (略)

   時刻フィールド
       %H     時 (00..23)
       %I     時 (01..12)
       %k     時 (0..23)
       %l     時 (1..12)
       %M     分 (00..59)
       %p     AM あるいは PM のロケール
       %r     時刻、12 時間 (hh:mm:ss [AP]M)
       %s     1970-01-01 00:00:00 UTC からの秒数 (標準外の拡張)
       %S     秒 (00..60)
       %T     時刻、24 時間 (hh:mm:ss)
       %X     ロケールによる時刻の表現 (%H:%M:%S)
       %Z     タイムゾーン (例 EDT)、あるいはタイムゾーンが決定できないならば
              無し

   日付フィールド
       %a     ロケールの省略形の曜日名 (Sun..Sat)
       %A     ロケールの完全表記の曜日名、可変長 (Sunday..Saturday)
       %b     ロケールの省略形の月名 (Jan..Dec)
       %B     ロケールの完全表記の月名、可変長 (January..December)
       %c     ロケールの日付と時刻 (Sat Nov 04 12:02:33 EST 1989)
       %d     月内通算日数 (01..31)
       %D     日付 (mm/dd/yy)
       %h     %b と同じ
       %j     年内通算日数 (001..366)
       %m     月 (01..12)
       %U     日曜日を週の最初の日とした年内通算週 (00..53)
       %w     週のうちの曜日 (0..6) (0 が日曜日)
       %W     月曜日を週の最初の日とした年内通算週 (00..53)
       %x     ロケールの日付表現 (mm/dd/yy)
       %y     年の最後の 2 つの数字 (00..99)
       %Y     年 (1970...)

  (略)

    -d datestr, --date datestr
              現在の時刻・日付の代わりに、 datestr で指定された時刻・日付を表
              示する。 datestr は普通のフォーマットならだいたいなんでも使うこ
              とができる。月名、タイムゾーン、‘am’ や ‘pm’ なども用いてよい。

  (略)

例
       一昨日の日付を表示するには:
              date --date ´2 days ago´

       3 ヶ月と 1 日後の日付を表示するには:
              date --date ´3 months 1 day´

       今年のクリスマスが年の初めから何日目かを表示するには:
              date --date ´25 Dec´ +%j
  (略)

Posted in Linux | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |