Como determinar e converter o tempo atual para o número de segundos decorridos durante o dia atual?

0

Eu quero perguntar a você que como determinar & converter o tempo atual para o número de segundos decorridos durante o dia atual?

Na verdade, quero mostrar quanto tempo é a meia-noite a partir de agora, em segundos. Como o total de segundos em um dia é 86400, subtrairei o tempo atual (em segundos decorridos desde esse dia) com 86400.

EDITAR:

Aqui está a pergunta atual. Se date -d não estiver funcionando, como o nosso instrutor pode fazer perguntas como essa? Pode haver um caminho talvez. Alguém entende essa pergunta. Eles têm uma maneira diferente que é subtraída a partir de segundos.

    
por Zeus 16.07.2016 / 03:38

4 respostas

1

Tente:

eval "'date +'@ s = (86400 - %S) - 60 * (%M + 60 * %H)''"; echo $s

No entanto, note que em fusos horários que têm horário de inverno e verão, ele não dará o resultado correto se solicitado no dia da mudança de / para horário de verão, antes da troca (que geralmente ocorre bem cedo) .

Tenha em atenção que, em csh , os operadores aritméticos são right -associative com */ tendo precedência sobre +- , como em

@ s = 1 - 2 + 3 - 4

é

@ s = 1 - (2 + (3 - 4))

E não:

@ s = (((1 - 2) + 3) - 4)

como em outros idiomas. Isso foi corrigido em tcsh (6.15.01) e você pode executar set compat_expr para voltar ao comportamento anterior.

Daí os parênteses em torno de 86400 - %S para que funcionem em csh e tcsh .

    
por 16.07.2016 / 11:36
3

Supondo que você tenha data GNU (ou outro programa date que entenda -d e funcione corretamente) e usando bash :

Você pode usar o sinalizador -d para relatar o tempo em vários pontos. Então, por exemplo

% date -d "00:00:00 tomorrow"
Sat Jul 16 00:00:00 EDT 2016

Podemos usar isso para informar sobre segundos com +%s

% date -d "00:00:00 tomorrow" +%s
1468641600

Sabemos o nosso tempo atual, em segundos:

% date +%s                       
1468633682

Assim, podemos calcular a diferença:

% secs_left=$(( $(date -d "00:00:00 tomorrow" +%s) - $(date +%s) ))
% echo $secs_left
7871

(que está quase certo; 7871 segundos são 2h 11min e 11 segundos, o que é correto para quando eu corri o comando).

EDIT para csh conforme solicitado:

Em csh , o comando similar seria

% @ secs_left = ( 'date -d "00:00:00 tomorrow" +%s' - 'date +%s' )
% echo $secs_left
7871
    
por 16.07.2016 / 03:50
0

isso parece uma pergunta de lição de casa.

dado que você está limitado a apenas obter horas e minutos e segundos, você terá que pegar esses números e fazer aritmética. a aritmética não é complexa, tenho certeza que você pode resolver isso.

isto não dará um resultado confiável porque há uma condição de corrida se o minuto for alterado durante a determinação desses três valores de entrada, para que sejam tomadas medidas para detectar isso falha e corrigir isso.

use o resultado da resposta do @StevenHaris para confirmar que seus cálculos estão corretos,

    
por 16.07.2016 / 11:05
0

no csh é bem simples:

    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"
    
por 26.11.2017 / 02:35