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?

169
demandé sur Léo Léopold Hertz 준영 2009-07-30 09:50:55

15 réponses

Sous Linux ou MacOS, vous pouvez utiliser:

date +%s

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

Exemple de sortie maintenant 1454000043.

321
répondu Naresh 2018-08-23 01:47:56

Dans Ruby:

>> Time.now.to_i
=> 1248933648
110
répondu bb. 2009-07-30 06:01:29

En python ajouter les lignes suivantes pour obtenir un horodatage:

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

curl icanhazepoch.com

Fondamentalement, il s'agit d'horodatages unix en tant que service (UTaaS)

13
répondu Hut8 2015-05-12 02:49:39

En Perl:

>> time
=> 1335552733
12
répondu davidchambers 2012-04-27 18:52:24

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.

8
répondu Alan Horn 2010-05-04 09:54:53

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"'
7
répondu Jonathan Leffler 2009-07-30 13:54:51
$ 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.

6
répondu Masi 2016-01-29 11:03:49

Pour être complet, PHP:

php -r 'echo time();'

Dans BASH:

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

À 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
2
répondu 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
répondu Rúben Jerónimo 2014-05-09 09:39:23

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
2
répondu ZagNut 2017-05-23 12:34:45

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

1
répondu Dusan Jovanov 2018-01-11 23:03:25

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

1
répondu Madbreaks 2018-06-06 21:14:35

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()}'
0
répondu jlliagre 2014-10-01 19:53:26