我怎样才能说出到明天的剩余时间(午夜,也包括小时和分钟)并将其保存到文本文件中,例如“直到午夜还剩 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 ))"
}