時間変換/フォーマットを指定するためのコマンドラインツール

時間変換/フォーマットを指定するためのコマンドラインツール

時間を変換/フォーマットするコマンドラインツールはありますか? (日付ではなく時間を意味します!)

これが私が期待するものです:

$ timeconverter --format '%s' 1h
3600
$ timeconverter --format '%h:%m:%s' 3665s
1:01:05
$ timeconverter --format '%H:%m:%s' 3665s
01:01:05
$ timeconverter --format '%Hh%Mm%Ss' 3966s
1h5m6s
$ timeconverter --format '%m' 2d
2880
$ timeconverter --format '%d' 1w
7
$ timeconverter --format '%y' 365d
1
$ timeconverter --format '%s' 1h10m
4200

ここで、%mは分、%dは日、%yは年、%hは時間、%sは秒、%wは週などです。

私は自分でシェルスクリプトを書くこともできますが、他の人がすでに書いている可能性が高いので、時間を節約したいと思います。

答え1

GNUソフトウェアがあります単位(多くのLinuxディストリビューションでパッケージとして利用可能units

以下は、2週間の日数を求める簡単な実行です。

$ units "2 week" day
* 14
/ 0.071428571

これマンページ入力、出力、終了コード、およびコマンドを使用するその他の方法について詳しく説明します。

答え2

GNUdateコマンドには、あなたが望むもののほとんどが含まれています。alias必要なコマンドを短くするために定義できます。

以下の例では、一部の例で使用するエイリアスを定義しました。

alias timeconverter='date -u -d "1970-01-01 + '

したがって、元のリストを使用すると、ここでさまざまな可能性があります(一部はunits他の回答で提案されているとおりです)

$ timeconverter --format '%s' 1h
3600
$ date -u -d "1970-01-01 01:00" +%s
3600

$ date -u -d "1970-01-01 + 1 hour" +%s
3600

$ units -t "1 hour" seconds
3600

$ timeconverter 1 hour" +'%s'
3600

$ timeconverter --format '%h:%m:%s' 3665s
1:01:05
$ date -u -d "@3665" +'%-k:%M:%S'
1:01:05

$ units "3665 seconds" time
    1 hr + 1 min + 5 sec

$ timeconverter 3665 seconds" +'%-k:%M:%S'
1:01:05
$ timeconverter --format '%H:%m:%s' 3665s
01:01:05
$ date -u -d "@3665" +'%H:%M:%S'
01:01:05

$ date -u -d "@3665" +'%T'
01:01:05

$ date -u -d "1970-01-01 + 3665 sec" +'%H:%M:%S'
01:01:05

$ date -u -d "1970-01-01 + 3665 seconds" +'%H:%M:%S'
01:01:05

$ timeconverter 3665 seconds" +'%H:%M:%S'
01:01:05
$ timeconverter --format '%Hh%Mm%Ss' 3966s
1h5m6s
$ date -u -d "@3966" +'%-kh%-Mm%-Ss'
1h6m6s
$ timeconverter --format '%m' 2d
2880
$ echo $(( $(date -u -d "1970-01-01 + 2 days" +'%s') / 60 ))
2880
$ timeconverter --format '%d' 1w
7
$ echo $(( $(date -u -d "1970-01-01 + 1 week" +'%s') / 60 / 60 / 24 ))
7
$ timeconverter --format '%y' 365d
1
$ echo $(( $(date -u -d "1970-01-01 + 365 days" +'%Y') - 1970 ))
1
$ timeconverter --format '%s' 1h10m
4200
$ date -u -d "1970-01-01 + 1 hour 10 min" +'%s'
4200

答え3

これを行うことができる成熟したコマンドラインツールがすでにあるとは想定しないでください。主な理由は、おそらくそうすれば多くの落とし穴が生じる可能性があるからです。人間の時間はそれほど線形的ではないからです。

例:今後2年が何分かを知りたいです。この数字は、2022年がうるう年か2023年がうるう年かによって異なります。

本当に「標準」単位を使用したい場合(つまり、現実を無視してください):

おそらくこれをシェルスクリプトではなく/usr/bin/env python3 -I -S入力引数を秒に変換し、必要な整数除算とモジュラスを計算し、フォーマット文字列を文字列フォーマット関数に渡す非常に小さなスクリプトとして実装します。出力できるすべての潜在的なフィールド。

とにかく繰り返します。これを行うにはいくつかの良い理由がありますが、それほど多くはありません。通常、結果が何であるかわからない場合、期間変換は危険になる可能性があります。実際には午前8時9分以降に鳴る「アラームが600分後に鳴ります」と印刷します。後ろに夏時間に合わせて時計を調整するのは悪い考えです。

関連情報