date
数日前のタイムスタンプを取得するためにこのコマンドを使用し、タイムスタンプを付与するにはどうすればよいですか?X
たとえば、UTCタイムスタンプはです。それ以前のUTCタイムスタンプをインポート1525192000
したいと思います。30
答え1
まず、タイムスタンプが1970年1月1日00:00:00 UTC以降の秒数であるとします。それ以外の場合は、対応するタイムスタンプに変換します。
したがって、希望の日数から秒を引く必要があります。
stamp=1525192000
day=$((60*60*24))
echo $(($stamp - 30*$day))
それからUnix epochの時間が得られます。日付と時刻に変換する必要がある場合DSTを考慮する必要がある場合は、date
このユーティリティを使用する必要があります。
を使用することもできますdate
。これにより、計算なしで他の日付要素を簡単に使用できます。
GNUの使用date
:
date --date="$(date --iso-8601=s -d @1525192000) -30 days" +%s
例:
$ date --date="$(date --iso-8601=s -d @1525192000)"
Tue, May 1, 2018 7:06:01 PM
$ date --date="$(date --iso-8601=s -d @1525192000) -30 days"
Wed, Apr 1, 2018 7:06:01 PM
$ date --date="$(date --iso-8601=s -d @1525192000) -30 days" +%s
1523466380
$ date --date="$(date --iso-8601=s -d @1525192000) -30 days -1 week -3 months" +%s
1514309200
FreeBSDとmacOSでは(この-j
方法はシステム日付を設定しようとしないので安全です。)
date -j -f "%a %b %d %T %Z %Y" "$(date -r 1234567890)" -v-30d "+%s"
編集:ありがとう。 Kusalananda、OpenBSD、およびNetBSDではサポートされていません-v
。