Linuxにタイムスタンプが与えられたら、X日前のタイムスタンプを取得する方法は?

Linuxにタイムスタンプが与えられたら、X日前のタイムスタンプを取得する方法は?

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

おすすめ記事