fecha - ¿Cómo puedo generar marcas de tiempo Unix?
epoch (16)
Con NodeJS, solo abre una terminal y escribe:
node -e "console.log(new Date().getTime())"
o node -e "console.log(Date.now())"
La pregunta relacionada es "Marca de tiempo de Datetime To Unix" , pero esta pregunta es más general.
Necesito las marcas de tiempo de Unix para resolver mi última pregunta. 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?
El comando ''fecha'' de unix es sorprendentemente versátil.
date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
Toma el resultado de la date
, que tendrá el formato definido por -f, y luego lo imprime (-j dice que no intentes establecer la fecha) en la forma +% s, segundos desde la época.
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
En Linux puedes usar:
date +%s
dónde
-
+%s
, segundos desde 1970-01-01 00:00:00 UTC. (GNU Coreutils 8.24 Date manual)
Ejemplo de salida ahora 1454000043.
En Perl:
>> time
=> 1335552733
En primer lugar, la ''época'' o tiempo cero de Unix es 1970-01-01 00: 00: 00Z (lo que significa la medianoche del 1 de enero de 1970 en la zona horaria Zulu o GMT o UTC). Una marca de tiempo de Unix es la cantidad de segundos transcurridos desde ese momento, sin contar los segundos intercalares.
Generar la hora actual en Perl es bastante fácil:
perl -e ''print time, "/n"''
Generar el tiempo correspondiente a un valor de fecha / hora dado es bastante menos fácil. Lógicamente, utiliza la función strptime()
de POSIX. Sin embargo, el módulo Perl POSIX :: strptime (que está separado del módulo POSIX) tiene la firma:
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) =
POSIX::strptime("string", "Format");
La función mktime
en el módulo POSIX tiene la firma:
mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
Entonces, si conoce el formato de sus datos, puede escribir una variante sobre:
perl -MPOSIX -MPOSIX::strptime -e /
''print mktime(POSIX::strptime("2009-07-30 04:30", "%Y-%m-%d %H:%M")), "/n"''
En python, agregue las siguientes líneas para obtener una marca de tiempo:
>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993
Esta es una pequeña herramienta que armé ya que siempre necesito obtener y convertir marcas de tiempo de Unix: http://www.unixstamp.com
Admite casi cualquier formato, incluidas las marcas de tiempo de milisegundos de javascript.
Para completar, PHP:
php -r ''echo time();''
En BASH:
clitime=$(php -r ''echo time();'')
echo $clitime
Probemos JavaScript :
var t = new Date().getTime();
... o incluso mejor, el enfoque estático:
var t = Date.now()
Si necesita una marca de tiempo de Unix desde 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()}''
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
en Ruby:
>> Time.now.to_i
=> 1248933648
curl icanhazepoch.com
Básicamente son marcas de tiempo unix como un servicio (UTaaS)
$ date +%s.%N
donde (GNU Coreutils 8.24 Date manual)
-
+%s
, segundos desde 1970-01-01 00:00:00 UTC -
+%N
, nanosegundos (000000000..99999999) desde época
Ejemplo de salida ahora 1454000043.704350695
. Noté que el manual de BSD de la date
no incluía una explicación precisa sobre la bandera +%s
.
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;
}
}