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?
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.
Em Ruby:
>> Time.now.to_i
=> 1248933648
Em python adicione as seguintes linhas para obter um horário:
>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993
curl icanhazepoch.com
Basicamente é o unix timestamps como um serviço (UTaaS)
Em Perl:
>> time
=> 1335552733
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.
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"'
$ 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
.
Para completar, PHP:
php -r 'echo time();'
In BASH:
clitime=$(php -r 'echo time();')
echo $clitime
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
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;
}
}
Em Haskell
import Data.Time.Clock.POSIX
main :: IO ()
main = print . floor =<< getPOSIXTime
In Go
import "time"
t := time.Unix()
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
Com NodeJS, basta abrir um terminal e digitar: node -e "console.log(new Date().getTime())"
ou node -e "console.log(Date.now())"
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).
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()}'