如何确定当前时间并将其转换为当天经过的秒数?

如何确定当前时间并将其转换为当天经过的秒数?

我想问你如何确定当前时间并将其转换为当天经过的秒数?

实际上,我想以秒为单位显示从现在开始距离午夜还有多长时间。由于一天的总秒数为 86400,因此我将用 86400 减去当前时间(以当天以来经过的秒数为单位)。

编辑:

这是实际的问题。如果date -d不起作用那么我们的教练怎么能提出这样的问题。也许有办法。这个问题谁都明白。他们有一种不同的方式,即减去几秒。

在此输入图像描述

答案1

假设您有 GNU date(或另一个可以理解并正常工作的date程序)并使用:-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)

与其他语言一样。这已在tcsh(6.15.01) 中修复,您可以运行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

这读起来就像一个家庭作业问题。

鉴于您只能获得小时、分钟和秒,您将不得不获取这些数字并进行算术。算术并不复杂,我相信你能算出来。

这不会给出可靠的结果因为有一个竞争条件如果在确定这三个输入值的过程中分钟发生变化,则应采取措施检测此故障并进行纠正。

使用@StevenHaris'答案的结果来确认您的计算是否正确,

相关内容