時間から合計数分をどのように取ることができますか?


8

コマンドを入力すると、システムはこの10:42のような時間を表示しました date +%R。時間の合計をとる必要があります。つまり、この642分です。合計時間を分単位で表示するコマンドまたはシェルスクリプトはありますか?

回答:


11

その日の合計分のみを取得するには、次のコマンドを使用します。

$ date "+%H*60+%M" | bc

例:

$ date +%R
09:30
$ date "+%H*60+%M" | bc
570

コツは、式を解釈して計算dateできるようbcに出力をフォーマットすることです。


2
を使用するとecho $(date +"%H*60+%M") | bc、zshでも動作します;)
AB

@ABある日切り替えますzsh
シルヴァン・ピノー

1
date "+%H*60+%M" | bc同様に動作します。おそらくどんなシェルでも。
デジタルトラウマ2015

@DigitalTrauma:シンプル、ありがとう。私はそれに応じて私の答えを更新しました。
シルヴァンピノー2015

5

ただバッシュ:

IFS=: read hour min < <(date +%R)
echo $(( 60 * 10#$hour + 10#$min ))

両方の変数を10進数として扱うように強制し、無効な8進数08および09


はい、echo $(( $(date "+%k * 60 + 10#%M") ))私が言いたかったことです
デジタルトラウマ2015

1
ええ、それは何も悪いことではありません。たぶん私の答えはもう少しです...教育
グレン・ジャックマン'10

3
date +%R | awk -F ":" '{print ($1 * 60) + $2}'

または

 echo $((($(date +%l) * 60 ) + $(date +%M)))

date +%l 時間を取得し、60を掛けて分を追加します date +%M


2

dateおよびの使用bash

eval "$(date +'today=%F now=%s')"; midnight=$(date -d "$today 0" +%s);echo "$(((now - midnight) / 60))"

$ date
Fr 10. Jul 08:45:05 CEST 2015

$ eval "$(date +'today=%F now=%s')"; midnight=$(date -d "$today 0" +%s);echo "$(((now - midnight) / 60))"
525

使用dateおよびZシェル(zshのを):

IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"

% date
Fr 10. Jul 08:40:53 CEST 2015

% IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"
520

1
@DineshDhananjayanあなたは私の答えに満足しましたか?次に、賛成票をくれ(give)。私があなたの問題を解決できたら、私の答えにマークを付けるとよいでしょう(✓)。askubuntu.com/help/someone-answers ;)
AB

1
私はあなたのzshの答えが正しいとは思いません:IFS=: set -- $(date +%T); echo $1戻り値08:16:52-必要になりますIFS=:; set ...
グレン・ジャックマン

@glennjackman Ups andありがとう、修正済み。:\
AB

1

IFSを使用する必要はありません。次の方法で実行できます。

date=$(date +'%l:%M')
read H M <<< ${date//[-: ]/ }
echo  "Total minutes: $(($H * 60 + $M))"

出力は次のとおりです。

Total minutes: 593

私はあなたの答えを修正しました。エラーメッセージはbash: 9 17*60+: syntax error in expression (error token is "17*60+")
AB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.