bash: converte a data de para timestamp de alterações de timestamp do unix

3

Executar o seguinte comando nos xen-servers (DOM0 ou DOMU) em $ company me fornece um número negativo, em todos os outros sistemas zero (0) (mesmo em meu cygwin).

date -d "1970-01-01T00:00:00" "+%s"

$TZ não está definido, /etc/localtime é o mesmo arquivo que /usr/share/zoneinfo/UTC

date está na versão 8.12 do GNU coreutils. O que deu errado aqui? Quais informações adicionais podem ser necessárias?

    
por killermoehre 18.03.2015 / 16:58

2 respostas

1

se $ TZ não estiver definido e / etc / localtime for UTC, então por que você está usando o fuso horário T (Tango) no comando date?

No meu sistema eu tenho um horário local do EDT.

# date
Wed Mar 18 12:39:03 EDT 2015

# date -d "1970-01-01 00:00:00" "+%s"
18000

Se eu forçar o Tango, obtenho um número negativo:

# date -d "1970-01-01T00:00:00" "+%s"
-25200

Se eu alterar meu fuso horário para UTC, ele funcionará como esperado:

# export TZ=UTC
# date
Wed Mar 18 16:41:23 UTC 2015
# date -d "1970-01-01 00:00:00" "+%s"
0

da página de manual de datas:

DATE STRING
       The  --date=STRING  is  a  mostly  free  format human readable date string such as "Sun, 29 Feb 2004 16:21:42
   -0800" or "2004-02-29 16:21:42" or even "next Thursday".  A date string may contain items indicating calendar
   date,  time of day, time zone, day of week, relative time, relative date, and numbers.  An empty string indi-
   cates the beginning of the day.  The date string format is more complex than is easily documented here but is
   fully described in the info documentation.

Como você pode ver, é uma "data de leitura humana em formato livre, na maioria das vezes", ele selecionará o fuso horário de qualquer lugar que achar melhor. É muito fácil testá-lo.

Por exemplo:

# date
Wed Mar 18 13:05:42 EDT 2015

agora com o tempo do Tango:

[root@wailea ~]# date -d "2015-3-18T13:05:42" 
Wed Mar 18 02:05:42 EDT 2015

agora com o tempo do Tango no final:

[root@wailea ~]# date -d "2015-3-18 13:05:42 T" 
Wed Mar 18 02:05:42 EDT 2015

agora, hora do zulu:

[root@wailea ~]# date -d "2015-3-18Z13:05:42" 
Wed Mar 18 09:05:42 EDT 2015

Eu acho que você pode ver o ponto. Se você não estiver familiarizado com fusos horários militares, veja a lista: link

Você também pode tentar usar o zdump para ver se o seu arquivo de zona não é realmente o que você está esperando:

Zdump prints the current time in each zonename named on the command line.

# zdump /etc/localtime
/etc/localtime  Wed Mar 18 21:21:04 2015 EDT
    
por 18.03.2015 / 17:43
0

Ao especificar a data e a hora no formato ISO 8601 , é necessário anexar um Z se você quer forçá-lo a ser tratado como UTC:

$ date -d "1970-01-01T00:00:00Z" "+%s"
0

Como alternativa, você pode usar um deslocamento UTC de +0 ou -0 em vez de Z .

    
por 18.03.2015 / 18:12