真夜中までの時間を計算し、結果をテキストファイルに出力します。

真夜中までの時間を計算し、結果をテキストファイルに出力します。

明日までの残り時間(真夜中、時間、分を含む)をどのように話し、「真夜中までにx時間y分残った」などのテキストファイルに保存しますか?

申し訳ありません。私は初心者です。 :(

答え1

たとえば、これを使用して深夜までの残り時間を計算できます(GNU仮定date)。

#!/bin/bash -
mid=$(date -d 'tomorrow 00:00' +%s)
now=$(date +%s)
hours=$(((mid - now) / 3600))
mins=$(((mid - now - hours * 3600) / 60))
printf "%d hours and %d minutes remaining until midnight\n" "$hours" "$mins"

FreeBSDの場合は、dateこれを使用して以下を計算しますmid

mid=$(date -v+1d -v0H -v0M -v0S +%s)

Linuxでは、時間の無駄が大丈夫なら、次のものを使用できますsystemd-analyze calendar。これにより、cronジョブスケジュールを反映するようにパラメータを変更して元の問題を解決できます。

$ systemd-analyze calendar '*-*-* 0:0:0' | grep "From now"
       From now: 15h left

答え2

要求したことについて謝罪する必要はありません。私たちがお手伝いします!深夜までの残り時間を計算し、「深夜までの残り時間x時間y分」の形式でテキストファイルに保存するには、Pythonなどのスクリプト言語を使用できます。これはこれを行う簡単なPythonスクリプトです。

import datetime

# Get the current time
now = datetime.datetime.now()

# Calculate the time until midnight
midnight = datetime.datetime(now.year, now.month, now.day) + datetime.timedelta(days=1)
time_until_midnight = midnight - now

# Extract hours and minutes
hours, seconds = divmod(time_until_midnight.seconds, 3600)
minutes = seconds // 60

# Format the message
remaining_time_message = f"{hours} hours and {minutes} minutes remaining until midnight"

# Save the message to a text file
with open("remaining_time.txt", "w") as file:
    file.write(remaining_time_message)

print(remaining_time_message)

スクリプトは次のように動作します。

  1. datetime日付と時刻の値を処理するモジュールを取得します。
  2. 現在時刻を取得するために使用されますdatetime.datetime.now()
  3. datetime真夜中オブジェクトを作成し、現在の時間を減算して真夜中までの時間を計算します。
  4. 時差から時間と分を抽出します。
  5. f - 文字列を使用してメッセージの形式を指定します。
  6. ステートメントを使用して、メッセージを「remaining_time.txt」というテキストファイルに保存しますwith

このスクリプトを実行すると、深夜までの残り時間を計算し、メッセージを指定されたテキストファイルに保存します。その後、「remaining_time.txt」の内容を読み、結果を確認できます。

スクリプトを実行するには、.pyファイル(たとえばcalculate_remaining_time.py)に保存し、Pythonインタプリタを使用して実行します。

python calculate_remaining_time.py

スクリプトはメッセージをコンソールに出力し、「remaining_time.txt」に保存します。

答え3

$ date +%H:%M | { IFS=: read h m; t=$((1440-60*h-m)); printf 'Time is %s:%s, %sh %sm until midnight\n' "$h" "$m" "$((t/60))" "$((t%60))"; }
Time is 11:38, 12h 22m until midnight

HH:MM- 形式で時間を読み、date一日の残り時間(分)に変換します。これはt

t次に、この値の合計となる時間と分を出力します。

パイプラインの見やすく印刷されたバージョン:

date +%H:%M | {
    IFS=: read h m
    t=$(( 1440 - 60*h - m ))
    printf 'Time is %s:%s, %sh %sm until midnight\n' "$h" "$m" "$(( t/60 ))" "$(( t%60 ))"
}

夏時間の切り替えが発生した早朝には、誤った結果が表示されることがあります。コードの相対的な単純さがこれを補完します。


同じですが、秒も考慮します。つまり、t今深夜まで残った秒になります。

date +%H:%M:%S | {
    IFS=: read h m s
    t=$(( 86400 - 3600*h - 60*m - s ))
    printf 'Time is %s:%s:%s, %sh %sm %ss until midnight\n' \
        "$h" "$m" "$s" "$(( t/3600 ))" "$(( (t%3600)/60 ))" "$(( (t%3600)%60 ))"
}

関連情報