计算到午夜的时间,并将结果输出到文本文件中

计算到午夜的时间,并将结果输出到文本文件中

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

相关内容