2009-07-30 19 views
145

La pregunta relacionada es "Datetime To Unix timestamp", pero esta pregunta es más general.¿Cómo puedo generar marcas de tiempo de Unix?

Necesito marcas de tiempo Unix para resolver mi last question. Mis intereses son Python, Ruby y Haskell, pero otros enfoques son bienvenidos.

¿Cuál es la forma más fácil de generar marcas de tiempo Unix?

+0

Hice una herramienta en línea hace algún tiempo. https://quickhash.com/timestamp –

+0

@ A.B.Carroll ¿Puede explicarnos por qué su herramienta en línea proporciona las marcas de tiempo de Unix? Por favor, adjunte un manual, etc. Parece proporcionar una gran cantidad de datos, pero realmente no puedo seguir cuál es el objetivo. –

+0

'gettimeofday' es el nombre de sistema POSIX y Linux: https://stackoverflow.com/questions/11765301/how-do-i-get-the-unix-timestamp-in-c-as-an-int/11765379# 11765379 TODO: ¿por qué 'strace date +% d' no lo llamas? –

Respuesta

260

en Linux Puede utilizar:

date +%s 

donde

  • +%s, segundos desde 1970-01-01 00:00:00 UTC. (GNU Coreutils 8.manual de 24 Fecha)

Ejemplo de salida ahora 1454000043.

+8

Nota: funciona en Mac OS X, también – JDS

+0

En Solaris: truss date 2> & 1 | grep^tiempo | awk '{print $ 3}' –

+0

La fecha BSD también admite +% s. Probablemente universal, ya que 'date' se define normalmente en POSIX.2. – Dereckson

109

en Ruby:

>> Time.now.to_i 
=> 1248933648 
+0

Ejecútelo desde la línea de comando: 'ruby -e 'pone Time.now.to_i'' – Pred

+0

para los rieles, puede usar' Time.zone.now.to_i'. Aunque dará el mismo o/p que 'Time.now.to) _i' pero' Time.zone.now.to_i' es el modo 'Rails'. – Swaps

7

En primer lugar, el Unix 'época' o tiempo cero es 1970-01-01 00: 00: 00Z (es decir, la medianoche del 1 de enero de 1970 en la Zulu o Huso horario GMT o UTC). Una marca de tiempo de Unix es la cantidad de segundos transcurridos desde ese momento, sin contar los segundos intercalares.

Generación de la hora actual en Perl es bastante fácil:

perl -e 'print time, "\n"' 

Generando el tiempo que corresponde a un valor de fecha/hora dado es bastante menos fácil. Lógicamente, usa la función strptime() de POSIX. Sin embargo, el Perl POSIX :: módulo strptime (que está separado del módulo de POSIX) tiene la firma:

($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = 
            POSIX::strptime("string", "Format"); 

La función mktime en el módulo de POSIX tiene la firma:

mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0) 

lo tanto, si usted conoce el formato de sus datos, puede escribir una variante en:

perl -MPOSIX -MPOSIX::strptime -e \ 
    'print mktime(POSIX::strptime("2009-07-30 04:30", "%Y-%m-%d %H:%M")), "\n"' 
8

El comando 'fecha' de unix es sorprendentemente versátil.

 
date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s" 

Toma la salida de date, que estará en el formato definido por f y, a continuación, lo imprime (-j dice no intente ajustar la fecha) en la forma +% s, segundo desde la época

+3

'fecha: opción no válida - 'j'' – nyuszika7h

+0

Es una extensión de fecha GNU, no en el estándar Unix (POSIX). – jlliagre

2

Esta es una pequeña herramienta que arme ya que siempre estoy necesitando para obtener y convertir las marcas de tiempo UNIX: http://www.unixstamp.com

Es compatible con casi cualquier formato, incluidos javascript marcas de tiempo de milisegundos.

+0

Ahora un enlace al dominio en venta –

16

En pitón añaden las siguientes líneas para conseguir un sello de tiempo:

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

En Haskell ...

para recuperarlo como un tipo POSIXTime:

import Data.Time.Clock.POSIX 
getPOSIXTime 

como un entero:

import Data.Time.Clock.POSIX 
round `fmap` getPOSIXTime 
2
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; 
     } 
    } 
1

Si necesita una marca de tiempo Unix de un script de shell (familia Bourne: sh, ksh, bash, zsh, ...), esto debería funcionar en cualquier máquina Unix a diferencia de las otras sugerencias (perl, haskell, ruby, python, Fecha GNU), se basa en un comando y característica estándar POSIX.

PATH=`getconf PATH` awk 'BEGIN {srand();print srand()}' 
9

curl icanhazepoch.com

Básicamente se trata de marcas de tiempo UNIX como un servicio (UTaaS)

3

Para completar, PHP:

php -r 'echo time();' 

En BASH:

clitime=$(php -r 'echo time();') 
echo $clitime 
+1

para bash ya tenemos el comando 'date', así que no creo que sea necesario llamar a php desde allí. – fedorqui

6
$ date +%s.%N 

donde (GNU Coreutils manual de 8.24 Fecha)

  • +%s, segundos desde 1970-01-01 00:00:00 UTC
  • +%N, nanosegundos (000000000..999999999) desde época

Ejemplo de salida ahora 1454000043.704350695. Noté que el manual BSD de date no incluía una explicación precisa sobre la bandera +%s.

+0

¿Por qué incluye nanosegundos por '+ $ N'? ¿Está incluido en la marca de tiempo UNIX en algunos sistemas? –

2

en Haskell

import Data.Time.Clock.POSIX 

main :: IO() 
main = print . floor =<< getPOSIXTime 

en Go

import "time" 
t := time.Unix() 

en 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); 

en Swift

NSDate().timeIntervalSince1970 // or Date().timeIntervalSince1970 
0

Probemos JavaScript:

var t = new Date().getTime(); 

...o aún mejor, el enfoque estático:

var t = Date.now() 
0

Con NodeJS, basta con abrir un terminal y escriba:
node -e "console.log(new Date().getTime())" o node -e "console.log(Date.now())"

Cuestiones relacionadas