yyyy Obtenha o tempo atual em segundos desde a época no Linux, Bash




linux format date time (6)

Eu preciso de algo simples como a date , mas em segundos desde 1970, em vez da data atual, horas, minutos e segundos.

date não parece oferecer essa opção. Existe uma maneira fácil?


Até agora, todas as respostas usam a date programa externo.

Desde o Bash 4.2, o printf possui um novo modificador %(dateformat)T que, quando usado com o argumento -1 gera a data atual com formato dado pelo dateformat , manipulado pelo strftime(3) ( man 3 strftime para informações sobre os formatos).

Então, para uma solução Bash pura:

printf '%(%s)T\n' -1

ou se você precisar armazenar o resultado em uma variável var :

printf -v var '%(%s)T' -1

Nenhum programa externo e nenhum subshell!

Desde o Bash 4.3, é possível até mesmo não especificar o -1 :

printf -v var '%(%s)T'

(mas pode ser mais sensato sempre dar o argumento -1 mesmo assim).

Se você usar -2 como argumento em vez de -1 , o Bash usará a hora em que o shell foi iniciado, em vez da data atual (mas por que você deseja isso?).


Esta é uma extensão do que @pellucide fez, mas para Macs:

Para determinar o número de segundos desde a época (1º de janeiro de 1970) para qualquer data específica (por exemplo, 21 de outubro de 1973)

$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800

Por favor, note que para a integralidade, eu adicionei a parte de tempo para o formato. A razão disso é que a date vai pegar qualquer parte da data que você forneceu e adicionar a hora atual ao valor fornecido. Por exemplo, se você executar o comando acima às 16:19, sem a parte '00: 00: 00 ', ele adicionará a hora automaticamente. Tal que "21 de outubro de 1973" será analisado como "21 de outubro de 1973 16:19:00". Isso pode não ser o que você quer.

Para converter seu carimbo de data e hora em uma data:

$ date -j -r 120034800
Sun Oct 21 00:00:00 PDT 1973

Página man da Apple para a implementação da data: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/date.1.html


Apenas para adicionar.

Obter os segundos desde a época (1 de janeiro de 1970) para qualquer data (por exemplo, 21 de outubro de 1973).

date -d "Oct 21 1973" +%s


Converta o número de segundos de volta para data

date --date @120024000


A date comando é bastante versátil. Outra coisa legal que você pode fazer com a data (descaradamente copiada de date --help ). Mostrar a hora local das 9h da próxima sexta-feira na costa oeste dos EUA

date --date='TZ="America/Los_Angeles" 09:00 next Fri'

Melhor ainda, reserve um tempo para ler a página do manual http://man7.org/linux/man-pages/man1/date.1.html


Isso deve funcionar:

date +%s

use este script bash (my ~/bin/epoch ):

#!/bin/bash

# get seconds since epoch
test "x$1" == x && date +%s && exit 0

# or convert epoch seconds to date format (see "man date" for options)
EPOCH="$1"
shift
date -d @"$EPOCH" "[email protected]"

Com a maioria das implementações do Awk:

awk 'BEGIN {srand(); print srand()}'




datetime