システムクロックの時間を前後に移動するにはどうすればいいですか?

システムクロックの時間を前後に移動するにはどうすればいいですか?

特定の時間や日付を設定するコマンドは知っていますが、現在の時間を基準にして時間を移動するコマンドが見つかりません。

時間を x 秒/分/時間進めたり戻したりするコマンドは何ですか? (また、日/月/年も可能でしょうか?)

答え1

システム時間を設定するコマンドはdate。システム時間を設定するには、root である必要があります。 はdate、現在の時刻からの相対的な時間ではなく、指定された時間に時間を設定します。後者の動作は、まったく意味がありません。 の出力を計算しdate、 にフィードバックすることで、現在の時刻を相対的な量で変更するコマンドを作成できます。dateたとえば、(組み込みでない Linux の場合)

date $(date +%m%d%H%M%Y.%S -d '1 hour ago')

NTP などの時間管理システムを実行している場合、このように時計を変更するとシステムが混乱することに注意してください。まずそれを停止してください。

を実行するとdate、ハードウェアクロックではなくシステム時刻が設定されます。Linuxでは、hwclock --systohcシステム時間をハードウェア クロックにコピーします。これは、クリーン シャットダウン時に自動的に実行されます。

別のタイムゾーンで時刻を確認したい場合は、上記の手順をすべて忘れて、希望のタイムゾーンを設定してください。Linuxでは、tzselectシステムのタイムゾーンを設定します。プログラムを別のタイムゾーンで実行するには、TZ環境変数を設定します。例:

export TZ=Asia/Tokyo
emacs

プログラムを実行して、実際の時間とは異なる時間であると信じ込ませたい場合は、プログラムの下で実行します。faketime

faketime '1 hour ago' date

答え2

次の形式を使用して、現在の時刻からどれだけ時間が進んでいるかを取得することもできます。

$ date --date='1 month'
Sun Sep 17 15:01:11 CST 2017
$ date --date='1 month'
Sun Sep 17 15:01:15 CST 2017
$ date --date='1 month 2 hours'
Sun Sep 17 17:01:23 CST 2017
$ date --date='1 month 2 hours 3 minutes'
Sun Sep 17 17:04:30 CST 2017

ago現在の日付より前の時刻を指定することもできます:

$ date
Fri Aug 18 16:14:41 CST 2017
$ date --date='1 month 2 days ago'
Sat Sep 16 16:14:43 CST 2017

--setオプションを使用することができます設定時刻ですが、+実際の日付に追加する時間、分などの数値の前に記号を追加します。

$ date
Thu Aug 17 15:07:00 CST 2017
$ date --set='+1 day +1 hour'
Fri Aug 18 16:07:24 CST 2017
$ date
Fri Aug 18 16:07:31 CST 2017
$ date --set='+1 month 3 days +1 hour'
Thu Sep 21 17:07:42 CST 2017

これが役に立つことを願っています。

答え3

date -Ins -s $(date -Ins -d '-1 hour')

答え4

私の記憶が正しければ、UNIX SVR4 では、「date」コマンドに「-a」オプションがあり、スーパーユーザーは時計を数秒進めたり戻したりできました。

関連情報