converte timestamp para epoch com bash builtin printf

3

Enquanto pesquisava uma abordagem diferente para converter um timestamp como

2015-09-08 11:07:35

para

1441703255

Encontrei muitas soluções bastante comuns encontradas, por exemplo,

date +%s --date "2015-09-08 11:07:35"

awk, perl ou soluções similares.

No entanto, a resposta de conversão do SE parece usar printf para essa conversão em uma versão bash "mais recente".

Como isso deve ser usado em um script com algumas limitações, eu prefiro não confiar em date para isso, mas tente uma abordagem que seja mais rápida. Minhas tentativas relevantes até agora:

printf '%(%s)2015-09-08 11:07:35'
bash: printf: warning: '2': invalid time format specification

printf '%(%s)T' "2015-09-08 11:07:35"
bash: printf: 2015-09-08 11:07:35: invalid number

Parece que não consigo usar corretamente printf , pois não tenho o manual exato em que a string dateformat é descrita. A manpage e info coreutils 'printf invocation' não me ajudaram a resolver este problema.

a versão do bash é

bash --version
GNU bash, Version 4.3.11(1)-release (x86_64-pc-linux-gnu)
    
por Dennis Nolte 08.09.2015 / 13:29

1 resposta

2

A outra questão pergunta especificamente como "obter o tempo atual em segundos desde a Época". O formato e os argumentos da data estão descritos no manual do bash (role para baixo até printf ):

%(datefmt)T

Causes printf to output the date-time string resulting from using datefmt as a format string for strftime(3). The corresponding argument is an integer representing the number of seconds since the epoch. Two special argument values may be used: -1 represents the current time, and -2 represents the time the shell was invoked. If no argument is specified, conversion behaves as if -1 had been given. This is an exception to the usual printf behavior.

Assim, o argumento tem que ser um número inteiro de segundos desde epoch¹ (por exemplo, consulte a resposta para "Como faço para converter um registro de data e hora de época em um formato legível por humanos" ).

¹ A menos que você use os valores especiais ( -1 ou -2 ) ou nenhum argumento (e, nesse caso, o padrão é -1 )

    
por 08.09.2015 / 18:36