秒をhh:mm:ssに変換するためにprintfに渡される形式は何ですか?

秒をhh:mm:ssに変換するためにprintfに渡される形式は何ですか?

次の形式のガイドラインを見ています。

$ printf [format] $elapsed

秒単位で表されます$elapsed。 「hh:mm:ss」を出力したいです。理解formatできない男性。誰でも提案できますか?

ベストアンサー1

printfksh93シェルの組み込み機能を使用し、$elapsed86400(1日)未満であると仮定すると、次のようになります。

TZ=UTC0 printf '%(%T)T\n' "#$elapsed"

または、printf最新バージョンのbashシェルに組み込まれている機能を使用してください(ksh93機能のサブセットを互換性のない方法でコピーします)。

TZ=UTC0 printf '%(%T)T\n' "$elapsed"

%(strftime-format)Tタイムスタンプとして解釈されるパラメータを取り、strftime()フォーマット仕様に従ってフォーマットするksh93拡張。ここで%T略語は、%H:%M:%SHH:MM:SS 24時間形式で時間を提供します。 Unix epoch時間ksh93を含むさまざまなタイムスタンプ形式を処理し、次のように解釈される場合を除き、Unix epoch時間として解釈される数値のみを処理します。#numberbash-1そして、-2シェルが呼び出された時間として解釈されます。

zshシェルと組み込みstrftimeコンポーネントを使用してください。

zmodload zsh/datetime
TZ=UTC0 strftime %T $elapsed

GNUまたはbusyboxを使用するdate

date -ud "@$elapsed" +%T

$elapsedこれはデフォルトでは1970-01-01 00:00:00 +0000以降のUnix秒数であるUnix epoch時間として解釈されるため、1970年1月1日に対応するUTC時間を取得TZ=UTC0できます。-u

さて、あなたがリンクしたマニュアルページprintfGNU実装と組み込みprintfGNUbashシェル(printf標準ユーティリティの完全に互換性のない2つの実装)の間の混合を文書化しようとする(および失敗)ようです。私はそのサイトを信頼していません。

走るman printf あなたのシステムでマニュアルページを入手あなたのスタンドアロンprintfユーティリティまたはinfo bash printfマニュアルinfo zsh printfページあなたのprintfshell zshやbashには独自の組み込みドキュメントはありません(ほとんどのシェルにはあります)。


1 ただし、fishシェル内で実行すると、man printfFish 組み込み機能のマニュアルページが表示されますprintf

おすすめ記事