Comment puis-je générer des horodatages Unix?
question Connexe est de "Datetime Pour Unix timestamp", mais cette question est plus générale.
J'ai besoin D'horodatages Unix pour résoudre ma 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?
15 réponses
Sous Linux ou MacOS, vous pouvez utiliser:
date +%s
Où
-
+%s
, secondes depuis 1970-01-01 00: 00: 00 UTC. (Manuel de date GNU Coreutils 8.24)
Exemple de sortie maintenant 1454000043.
En python ajouter les lignes suivantes pour obtenir un horodatage:
>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993
curl icanhazepoch.com
Fondamentalement, il s'agit d'horodatages unix en tant que service (UTaaS)
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'imprime (-j dit ne pas essayer de définir la date) sous la forme + %s, secondes depuis l'époque.
Tout D'abord, L'Unix 'epoch' ou zero-time est 1970-01-01 00: 00: 00Z (ce qui signifie minuit du 1er janvier 1970 dans le fuseau horaire Zulu ou GMT ou UTC). Un horodatage Unix est le nombre de secondes écoulées depuis ce temps-ne tenant pas 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 de date/heure donnée est un peu moins facile. Logiquement, vous utilisez la fonction strptime()
de POSIX. Cependant, le perl POSIX:: strptime le module (qui est séparé 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:
perl -MPOSIX -MPOSIX::strptime -e \
'print mktime(POSIX::strptime("2009-07-30 04:30", "%Y-%m-%d %H:%M")), "\n"'
$ date +%s.%N
Where (GNU Coreutils 8.24 date manual)
-
+%s
, secondes depuis 1970-01-01 00:00:00 UTC -
+%N
, nanosecondes (000000000..999999999) depuis l'époque
Exemple 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();'
Dans BASH:
clitime=$(php -r 'echo time();')
echo $clitime
À Haskell...
Pour le récupérer en tant que type POSIXTime:
import Data.Time.Clock.POSIX
getPOSIXTime
Comme un entier:
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;
}
}
Dans Haskell
import Data.Time.Clock.POSIX
main :: IO ()
main = print . floor =<< getPOSIXTime
Dans Aller
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
Avec NodeJS, ouvrez simplement un terminal et tapez: node -e "console.log(new Date().getTime())"
ou node -e "console.log(Date.now())"
Essayons JavaScript :
var t = Math.floor((new Date().getTime()) / 1000);
...ou encore plus agréable, 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 des secondes entières qui se sont écoulées (par rapport à l'arrondi, qui pourrait arrondir à une seconde entière qui n'est pas encore passée).
Si vous avez besoin D'un horodatage Unix à partir d'un script shell (famille Bourne: sh, KSH, bash, zsh, ...), cela devrait fonctionner sur N'importe quelle machine Unix car 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()}'