特定の日付から1か月または少なくとも30日を引く方法はUnixにありますか?この日付はユーザーが入力します。
例:
2012年11月19日 - 1ヶ月= 2013年10月19日
これはうまくいきません。
date -d '2013-10-13 - 1 month' '+%F'
ベストアンサー1
最も簡単な方法は、日付をunix time_t値(つまり、新起源の開始後の秒数または「1-1-1970 00:00:00」)に変換してから30日* 86400秒を減算することです。それからの日数。
set -x
たとえば、D変数の値が変更されていることを確認できるように、次の例を使用します。
#! /bin/ksh
set -x
D=$(date -d '2013-10-13' '+%s')
D=$((D - 30 * 86400))
date -d "@$D"
これはdate
GNU CoreutilsのGNUバージョンによって異なります。他のバージョンの日付@
はgawk
。
echo "$D" | gawk '{print strftime("%c", $0)}'
私の最初の答えは通常のawkを使用することを提案しましたが、私のDebianシステムで追加のテストを実行した結果、この機能が利用できないか組み込まれていないため、mawk
GNU CoreutilsまたはGNU Awkをインストールする必要があります。original-awk
strftime
Perlがシステムにインストールされている場合は、awkの代わりにPerlを使用できます。
echo $D | perl -nE 'say scalar gmtime $_'
これには、これを行うためのいくつかの選択肢と例があります。
https://stackoverflow.com/questions/3249827/convert-from-unixtime-at-command-line