現在時刻を確認し、それを1日の経過時間(秒)に変換するにはどうすればよいですか?

現在時刻を確認し、それを1日の経過時間(秒)に変換するにはどうすればよいですか?

現在時刻を確認し、1日の経過した秒に変換する方法を尋ねたいです。

実は今から真夜中までの時間を秒単位で表示したいです。 1 日の合計秒数は 86400 なので、86400 から現在時刻 (その日以降に経過した秒単位) を減算します。

編集する:

これは実用的な問題です。それができなければ、どのようにdate -d私たちのコーチがそのような質問をすることができます。たぶん方法があるかもしれません。誰もがこの問題を理解しています。秒を引く方法が異なります。

ここに画像の説明を入力してください。

答え1

dateGNU日付(またはそれを理解し、うまく機能する他のプログラム)があるとし、次を使用します。-dbash

この-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で動作します。cshtcsh

答え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の回答結果を使用して計算が正しいことを確認し、

関連情報