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") ))
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)?
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
Observe que alguns outros shells possuem o recurso incorporado:
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))
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).