明日までの残り時間(真夜中、時間、分を含む)をどのように話し、「真夜中までに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)
スクリプトは次のように動作します。
datetime
日付と時刻の値を処理するモジュールを取得します。- 現在時刻を取得するために使用されます
datetime.datetime.now()
。 datetime
真夜中オブジェクトを作成し、現在の時間を減算して真夜中までの時間を計算します。- 時差から時間と分を抽出します。
- f - 文字列を使用してメッセージの形式を指定します。
- ステートメントを使用して、メッセージを「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 ))"
}