シェルスクリプトの秒である $i の変数があり、それを 24 HOUR HH:MM:SS に変換しようとしています。これはシェルで可能ですか?
質問する
51840 次
7 に答える
87
これがあなたが探していることを正確に行うための楽しいハッキーな方法です=)
date -u -d @${i} +"%T"
説明:
- この
date
ユーティリティを使用すると、1970-01-01 00:00:00 UTCからの秒単位で文字列から時刻を指定し、指定した形式で出力できます。 - オプションはUTC時刻を表示する
-u
ことであるため、タイムゾーンオフセットは考慮されません(1970年からの開始時刻はUTCであるため) - 次の部分はGNU
date
固有(Linux)です。-d
パーツは、使用する代わりに文字列から時間情報を受け入れるように指示しdate
ますnow
- その
@${i}
部分は、それが数秒date
であるとあなたが言う方法です$i
- これ
+"%T"
は、出力をフォーマットするためのものです。ページからman date
:%T time; same as %H:%M:%S
。パーツだけを気にするのでHH:MM:SS
、これがぴったりです!
于 2012-11-16T19:17:51.123 に答える
18
別のアプローチ: 算術
i=6789
((sec=i%60, i/=60, min=i%60, hrs=i/60))
timestamp=$(printf "%d:%02d:%02d" $hrs $min $sec)
echo $timestamp
生産する1:53:09
于 2012-11-16T23:16:08.967 に答える
15
引数は-d
日付からcoreutils
(Linux) のみに適用されます。
BSD/OS X では、
date -u -r $i +%T
于 2014-02-17T06:48:21.073 に答える
1
エポックから秒単位の日付を表す場合$i
は、次のように表示できます。
date -u -d @$i +%H:%M:%S
しかし、あなたはそれ$i
が日付ではなく間隔(例えば、ある期間)であると思っているようです、そしてそれから私はあなたが何を望んでいるのか理解していません。
于 2012-11-16T19:17:47.090 に答える
0
明確にするために、@ Darenの回答を続けます。タイムゾーンへの変換を使用する場合は、「u」スイッチを使用しないでください。date -d @$i +%T
date -d @"$i" +%T
于 2018-02-13T15:02:25.187 に答える