答え1
date
GNU日付(またはそれを理解し、うまく機能する他のプログラム)があるとし、次を使用します。-d
bash
この-d
フラグを使用して、さまざまなポイントの時間を報告できます。例えば
% date -d "00:00:00 tomorrow"
Sat Jul 16 00:00:00 EDT 2016
これを使用して秒を報告できます。+%s
% date -d "00:00:00 tomorrow" +%s
1468641600
現在の時間を秒単位で知ることができます。
% date +%s
1468633682
したがって、差を計算することができます。
% secs_left=$(( $(date -d "00:00:00 tomorrow" +%s) - $(date +%s) ))
% echo $secs_left
7871
(これはほぼ正確です。7871秒は2時間11分11秒で、これはコマンドを実行したときに正確でした。)
csh
要求に応じて編集:
csh
同様のコマンドでは、次のようになります。
% @ secs_left = ( `date -d "00:00:00 tomorrow" +%s` - `date +%s` )
% echo $secs_left
7871
答え2
努力する:
eval "`date +'@ s = (86400 - %S) - 60 * (%M + 60 * %H)'`"; echo $s
ただし、冬と夏時間が適用される時間帯では、夏時間が移行する日ではなく、移行前(通常早朝に発生)に呼び出すと正しい結果が得られません。
csh
注意してください右組合*/
より優先します+-
。
@ s = 1 - 2 + 3 - 4
はい
@ s = 1 - (2 + (3 - 4))
いいえ:
@ s = (((1 - 2) + 3) - 4)
他の言語と同じです。この問題は(6.15.01)で修正されており、tcsh
実行するとset compat_expr
以前の動作に戻ることができます。
したがって、周囲にかっこがあるので、86400 - %S
で動作します。csh
tcsh
答え3
cshでは非常に簡単です。
set start_time = `date +%s`
set end_time = `date +%s`
@ time_elapsed = $end_time - $start_time
echo "$time_elapsed time elapsed in seconds"
@ time_elapsed = `date -u -r $time_elapsed +%T`
echo = "$time_elapsed time elapsed in hh:mm:ss format"
答え4
これは宿題の質問のように読まれます。
時間、分、秒だけを取得できることを考慮すると、その数を取得して計算する必要があります。算数は複雑ではありません。あなたがそれを見つけることができると確信しています。
これにより、信頼できる結果が得られなくなります。一つあるから競争条件これら3つの入力値の決定中に時間が変わった場合は、このエラーを検出して修正するための措置を講じる必要があります。
@StevenHarisの回答結果を使用して計算が正しいことを確認し、