web-dev-qa-db-fra.com

Comment générer des timestamps Unix?

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?

210

Sous Linux ou MacOS, vous pouvez utiliser:

date +%s

  • +%s, secondes depuis le 1970-01-01 00:00:00 UTC. (Manuel GNU Coreutils 8.24 Date)

Exemple de sortie maintenant 1454000043.

403
Naresh

en rubis:

>> Time.now.to_i
=> 1248933648
110
bb.

Dans python, ajoutez les lignes suivantes pour obtenir un horodatage:

>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993
17

curl icanhazepoch.com

Fondamentalement, c'est un timestamp unix en tant que service (UTaaS)

16
Hut8

En Perl:

>> time
=> 1335552733
12
davidchambers

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.

8
Alan Horn

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"'
7
Jonathan Leffler
$ 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'é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.

6
Lydia

Pour être complet, PHP:

php -r 'echo time();'

À BASH:

clitime=$(php -r 'echo time();')
echo $clitime
4
Mike Mackintosh

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
3
ZagNut
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

À 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
2
Tom Morris

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).

1
Madbreaks

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()}'
0
jlliagre

Dans Bash 5, il y a une nouvelle variable:

echo $EPOCHSECONDS

Ou si vous voulez une plus grande précision (en microsecondes):

echo $EPOCHREALTIME
0
Colera Su

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
0
Viraj.Hadoop

Avec NodeJS, ouvrez simplement un terminal et tapez:
node -e "console.log(new Date().getTime())" ou node -e "console.log(Date.now())"

0
Dusan Jovanov