2009-07-07 11 views
47

Cómo obtener el valor de fecha actual en epoch, es decir, el número de días transcurridos desde 1970-1-1. Necesito una solución en script de shell de Unix.Obtener la fecha actual en época del script de shell de Unix

+0

Eso depende de t el lenguaje. ¿Qué idioma usas? – Stephan202

+0

¿Qué idioma o tecnología estás usando? –

+0

Estoy usando Unix. Necesito esto para usar dentro de un script de shell ... –

Respuesta

24

actualización: La respuesta previamente publicado aquí ligada a una secuencia de comandos personalizada que ya no está disponible, únicamente porque el PO indicó que date +'%s' no funcionó para él. Consulte UberAlex' answer y cadrian's answer para soluciones adecuadas. En resumen:

  1. Para el número de segundos ya que el uso época Unix date(1) de la siguiente manera:

    date +'%s' 
    
  2. Para el número de días desde la época Unix dividir el resultado por el número de segundos en un día (¡tenga en cuenta el doble paréntesis!):

    echo $(($(date +%s)/60/60/24)) 
    
+0

Funciona ... muchas gracias. –

+0

De nada :) – Stephan202

+0

FYI: ** los enlaces están rotos ** – Soren

-4

Dependiendo del idioma que se está usando va a ser algo tan simple como

CInt(CDate("1970-1-1") - CDate(Today())) 

Irónicamente, ayer fue día 40.000 si se utiliza 1/1/1900 como "día cero" al igual que muchos sistemas informáticos utilizar.

+0

Eso se ve como VB para mí. La pregunta es en relación con un guión de shell de Unix. – Noldorin

+0

Lo editó después de responder. Gracias por su entrada de todos modos. – mandroid

+2

¿Por qué es irónico? – jameshfisher

10
echo $(($(date +%s)/60/60/24)) 
+0

+1 Debería funcionar en la mayoría de los shells y unixes de bourne – nos

+2

Tenga en cuenta que '% s' es una extensión.La fecha POSIX no tiene '% s'. Vea http://pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html para más detalles. – Jens

+1

No todos los días tienen 86400 (60 * 60 * 24) segundos (horario de verano, segundos intercalares, etc.) –

127

El Unix comando Fecha mostrará en el tiempo época

el comando es

date +"%s" 

http://unixhelp.ed.ac.uk/CGI/man-cgi?date

Editar: Algunas personas han observado que solicitó días, por lo que es el resultado de esa comando dividido por 86,400

+6

Tenga en cuenta que '% s' es una extensión. La fecha POSIX no tiene '% s'. Vea http://pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html para más detalles. – Jens

+1

No todos los días tienen 86400 segundos (horario de verano, segundos intercalares, etc.) –

+5

Una vez más, en tiempo unix (fecha +% s) cada día tiene 86400 "segundos", no incluye segundos intercalares y ciertamente no es DST. La respuesta es correcta –

1
echo `date +%s`/86400 | bc 
+1

No todos los días tienen 86400 segundos (horario de verano, segundos intercalares, etc.) –

+5

pero cada 'día de Unix' tiene 86400 segundos –

Cuestiones relacionadas