La question connexe est "Horodatage de Datetime vers Unix" , mais cette question est plus générale.
J'ai besoin des horodatages Unix pour résoudre mon dernière question. Mes intérêts sont Python, Ruby et Haskell, mais d'autres approches sont les bienvenues.
Quel est le moyen le plus simple de générer des horodatages Unix?
Sous Linux ou MacOS, vous pouvez utiliser:
date +%s
où
+%s
, secondes depuis le 1970-01-01 00:00:00 UTC. (Manuel GNU Coreutils 8.24 Date)Exemple de sortie maintenant 1454000043.
en rubis:
>> Time.now.to_i
=> 1248933648
Dans python, ajoutez les lignes suivantes pour obtenir un horodatage:
>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993
curl icanhazepoch.com
Fondamentalement, c'est un timestamp unix en tant que service (UTaaS)
En Perl:
>> time
=> 1335552733
La commande unix 'date' est étonnamment polyvalente.
date -j -f "% a% b% d% T% Z% Y" "` date` "" +% s "
Prend la sortie de date
, qui sera dans le format défini par -f, puis l’imprimera (-j dit ne pas essayer de définir la date) sous la forme +% s, secondes depuis Epoch.
Tout d’abord, l’époque Unix 'Epoch' ou heure zéro est 1970-01-01 00: 00: 00Z (ce qui signifie minuit le 1er janvier 1970 dans le fuseau horaire zoulou ou GMT ou UTC). Un horodatage Unix est le nombre de secondes écoulées depuis cette heure, sans tenir compte des secondes intercalaires.
Générer l'heure actuelle en Perl est plutôt facile:
Perl -e 'print time, "\n"'
Générer l'heure correspondant à une valeur donnée est plutôt moins facile. Logiquement, vous utilisez la fonction strptime()
de POSIX. Cependant, le module Perl POSIX :: strptime (distinct du module POSIX) a la signature:
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) =
POSIX::strptime("string", "Format");
La fonction mktime
dans le module POSIX a la signature:
mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
Donc, si vous connaissez le format de vos données, vous pouvez écrire une variante sur:
Perl -MPOSIX -MPOSIX::strptime -e \
'print mktime(POSIX::strptime("2009-07-30 04:30", "%Y-%m-%d %H:%M")), "\n"'
$ date +%s.%N
where (Manuel GNU Coreutils 8.24 Date)
+%s
, secondes depuis le 1970-01-01 00:00:00 UTC+%N
, nanosecondes (000000000..999999999) depuis l'époqueExemple de sortie maintenant 1454000043.704350695
. J'ai remarqué que le manuel BSD de date
n'incluait pas d'explication précise sur le drapeau +%s
.
Pour être complet, PHP:
php -r 'echo time();'
À BASH:
clitime=$(php -r 'echo time();')
echo $clitime
dans Haskell
import Data.Time.Clock.POSIX
main :: IO ()
main = print . floor =<< getPOSIXTime
dans Go
import "time"
t := time.Unix()
dans C
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);
dans Swift
NSDate().timeIntervalSince1970 // or Date().timeIntervalSince1970
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;
}
}
À Haskell ...
Pour le récupérer en tant que type POSIXTime:
import Data.Time.Clock.POSIX
getPOSIXTime
En tant qu'entier:
import Data.Time.Clock.POSIX
round `fmap` getPOSIXTime
Essayons JavaScript :
var t = Math.floor((new Date().getTime()) / 1000);
... ou même mieux, l'approche statique:
var t = Math.floor(Date.now() / 1000);
Dans les deux cas, je divise par 1000
pour passer de secondes en millis et j’utilise Math.floor
pour ne représenter que les secondes entières qui se sont écoulées (par opposition à l’arrondi, qui pourrait arrondir à une seconde entière passé encore).
Si vous avez besoin d'un horodatage Unix à partir d'un script Shell (famille Bourne: sh, ksh, bash, zsh, ...), cela devrait fonctionner sur toutes les machines Unix, contrairement aux autres suggestions (Perl, haskell, Ruby, python, GNU date), il est basé sur une commande et une fonctionnalité standard POSIX.
PATH=`getconf PATH` awk 'BEGIN {srand();print srand()}'
Dans Bash 5, il y a une nouvelle variable:
echo $EPOCHSECONDS
Ou si vous voulez une plus grande précision (en microsecondes):
echo $EPOCHREALTIME
Si je veux imprimer date-heure utc en utilisant la commande date, je dois utiliser l'argument -u avec la commande date.
Exemple
date -u
Sortie
Fri Jun 14 09:00:42 UTC 2019
Avec NodeJS, ouvrez simplement un terminal et tapez:node -e "console.log(new Date().getTime())"
ou node -e "console.log(Date.now())"