Método simples para encontrar o número de segundos entre dois formatos de data (não-padrão)?

3

Eu tenho um programa que gera datas no seguinte formato:

Thu Mar 5 09:15:27 2015

Isso está muito próximo da saída de date no Linux, mas esse formato não inclui o fuso horário. Supondo que eu possa capturar a string Thu Mar 5 09:15:27 2015 como date1 e a string Thu Mar 5 09:30:58 2015 como date2 in bash , como posso obter o número de segundos entre essas duas datas (sem ter que escrever meu próprio bash / python / etc. script para fazer o cálculo)?

    
por drjrm3 05.03.2015 / 17:05

3 respostas

5

Não tenho certeza do que você quer dizer com "sem cálculo". O seguinte faz o cálculo ...

date1="Thu Mar 5 09:15:27 2015"
date2="Thu Mar 5 09:30:58 2015"

printf "%s\n" $(( $(date -d "$date2" "+%s") - $(date -d "$date1" "+%s") ))
    
por 05.03.2015 / 17:19
1

Sem as informações do fuso horário, nem sempre é possível dar a resposta correta.

#!/bin/bash
export TZ
for TZ in America/New_York Europe/Prague ; do
    d1=$(date -d 'Mar 8 01:59:59 2015' +%s)
    d2=$(date -d 'Mar 8 03:00:01 2015' +%s)
    echo "$TZ: $((d2-d1))"
done
    
por 05.03.2015 / 17:24
0

Observe que alguns outros shells possuem o recurso incorporado:

zsh

zmodload zsh/datetime
date1='Thu Mar 5 09:15:27 2015'
date2='Thu Mar 5 09:30:58 2015'
for v (date{1,2}) strftime -rs $v '%a %b %d %T %Y' ${(P)v}
echo $((date2 - date1))

ksh93

date1='Thu Mar 5 09:15:27 2015'
date2='Thu Mar 5 09:30:58 2015'
echo "$(($(printf '%(%s)T - %(%s)T' "$date2" "$date1")))"

(para ambos, as datas são consideradas no fuso horário local).

    
por 05.03.2015 / 17:46

Tags