Como posso gerar o Unix timestamps?

a questão relacionada é "Datetime To Unix timestamp" , mas esta questão é mais geral.

Preciso de datas Unix para resolver a minha última pergunta.Os meus interesses são Python, Ruby e Haskell, mas outras abordagens são bem-vindas.

Qual é a maneira mais fácil de gerar os timestamps Unix?

Author: Léo Léopold Hertz 준영, 2009-07-30

15 answers

Em Linux ou MacOS pode usar:

date +%s

Onde

  • Segundos desde 1970-01-01-01: 00: 00 UTC. (GNU Coreutils 8.24 Date manual)

Exemplo de saída agora 1454000043.

 321
Author: Naresh, 2018-08-23 01:47:56

Em Ruby:

>> Time.now.to_i
=> 1248933648
 110
Author: bb., 2009-07-30 06:01:29

Em python adicione as seguintes linhas para obter um horário:

>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993
 17
Author: Steven Kryskalla, 2015-03-23 13:50:42

curl icanhazepoch.com

Basicamente é o unix timestamps como um serviço (UTaaS)

 13
Author: Hut8, 2015-05-12 02:49:39

Em Perl:

>> time
=> 1335552733
 12
Author: davidchambers, 2012-04-27 18:52:24

O comando 'date' do unix é surpreendentemente versátil.

date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"

Toma o resultado de date, que será no formato definido por-f, E depois imprime-o (- j diz para não tentar definir a data) na forma +%s, segundos desde a época.

 8
Author: Alan Horn, 2010-05-04 09:54:53

Em Primeiro Lugar, O Unix 'epoch' ou tempo zero é 1970-01-01 00:00:00Z (ou seja, meia-noite de 1 de janeiro de 1970 no fuso horário Zulu ou GMT ou UTC). Um selo de tempo Unix é o número de segundos desde esse tempo - não contabilizando os segundos bissextos.

Gerar o tempo actual em Perl é bastante fácil:

perl -e 'print time, "\n"'

Gerar o tempo correspondente a um dado valor de data/hora é bastante menos fácil. Logicamente, você usa a função strptime() do POSIX. No entanto, o Perl POSIX:: o módulo strptime (que está separado do módulo POSIX) tem a assinatura:

($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = 
                                     POSIX::strptime("string", "Format");

A função mktime no módulo POSIX tem a assinatura:

mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
Então, se você conhece o formato dos seus dados, você pode escrever uma variante em:
perl -MPOSIX -MPOSIX::strptime -e \
    'print mktime(POSIX::strptime("2009-07-30 04:30", "%Y-%m-%d %H:%M")), "\n"'
 7
Author: Jonathan Leffler, 2009-07-30 13:54:51
$ date +%s.%N

Onde (manual de Data do GNU Coreutils 8.24)

  • +%s, segundos desde 1970-01-01:00:00 UTC
  • +%N, nanossegundos (000000000..999999999) desde a época

Exemplo de saída agora 1454000043.704350695. Reparei que o manual BSD de date não incluía uma explicação precisa sobre a bandeira +%s.

 6
Author: Masi, 2016-01-29 11:03:49

Para completar, PHP:

php -r 'echo time();'

In BASH:

clitime=$(php -r 'echo time();')
echo $clitime
 3
Author: Mike Mackintosh, 2015-07-05 16:13:40

Em Haskell...

Para recuperá-lo como um tipo POSIXTime:

import Data.Time.Clock.POSIX
getPOSIXTime

Como um inteiro:

import Data.Time.Clock.POSIX
round `fmap` getPOSIXTime
 2
Author: Tom Morris, 2014-01-03 15:13:23
public static Int32 GetTimeStamp()
    {
        try
        {
            Int32 unixTimeStamp;
            DateTime currentTime = DateTime.Now;
            DateTime zuluTime = currentTime.ToUniversalTime();
            DateTime unixEpoch = new DateTime(1970, 1, 1);
            unixTimeStamp = (Int32)(zuluTime.Subtract(unixEpoch)).TotalSeconds;
            return unixTimeStamp;
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex);
            return 0;
        }
    }
 2
Author: Rúben Jerónimo, 2014-05-09 09:39:23

Em Haskell

import Data.Time.Clock.POSIX

main :: IO ()
main = print . floor =<< getPOSIXTime

In Go

import "time"
t := time.Unix()

Em

time(); // in time.h POSIX

// for Windows time.h
#define UNIXTIME(result)   time_t localtime; time(&localtime); struct tm* utctime = gmtime(&localtime); result = mktime(utctime);

In Swift

NSDate().timeIntervalSince1970 // or Date().timeIntervalSince1970
 2
Author: ZagNut, 2017-05-23 12:34:45

Com NodeJS, basta abrir um terminal e digitar:
node -e "console.log(new Date().getTime())" ou node -e "console.log(Date.now())"

 1
Author: Dusan Jovanov, 2018-01-11 23:03:25
Vamos tentar JavaScript:
var t = Math.floor((new Date().getTime()) / 1000);

...ou ainda melhor, a abordagem estática:

var t = Math.floor(Date.now() / 1000);

Em ambos os casos divido por {[2] } para passar de segundos para millis e uso Math.floor para representar apenas segundos inteiros que passaram (vs. arredondamento, que pode arredondar até um segundo inteiro que ainda não passou).

 1
Author: Madbreaks, 2018-06-06 21:14:35

Se precisar de um timestamp Unix de um script shell (família Bourne: sh, ksh, bash, zsh,...), isto deve funcionar em qualquer máquina Unix como diferente das outras sugestões (perl, haskell, ruby, python, GNU date), ele é baseado em um comando e recurso padrão POSIX.

PATH=`getconf PATH` awk 'BEGIN {srand();print srand()}'
 0
Author: jlliagre, 2014-10-01 19:53:26