2011-05-09 19 views

Respuesta

2

Convierta a la marca de tiempo (un entero largo), reste la cantidad correcta de milisegundos, vuelva a formatear al formato que necesite.

duro para dar más detalles ya que no especifica un lenguaje de programación ...

+0

ahh .. estoy usando la cáscara script, mi fórmula es así -DATE = 'date" +% m /% d /% Y -% H:% M:% S "' y de DATE quiero restar 1 hora –

+1

¿Se requiere que te quedes en shel l? Un script awk o perl en línea podría restar fácilmente una hora y la salida en su formato requerido. – CoreyStup

30

Los siguientes comando funciona en las versiones recientes de GNU date:

date -d '1 hour ago' "+%m/%d/%Y -%H:%M:%S" 
+0

i recieve -date: opción ilegal - d uso: fecha [-u] mmddHHMM [[cc] yy] [. SS] fecha [-u] [+ formato] fecha -a [-] sss [. fff] –

+0

@shamir esto significa que su versión de fecha no admite esta opción. – dogbane

+0

lo averiguo - lo publico porque ¿podría saber alguna otra forma de hacerlo en la máquina solaris? –

5
date -v-60M "+%m/%d/%Y -%H:%M:%S" 

DATE=`date -v-60M "+%m/%d/%Y -%H:%M:%S"` 

Si usted tiene fiesta versión 4.4+ puede usar la fecha interna de impresión y aritmética de bash:

printf "current date: %(%m/%d/%Y -%H:%M:%S)T\n" 
printf "date - 60min: %(%m/%d/%Y -%H:%M:%S)T\n" $(($(printf "%(%s)T") - 60 * 60)) 

El $(printf "%(%s)T") imprime los segundos de época, el $((epoch - 60*60)) es bash-aritmética, restando 1 hora en segundos. Impresiones:

current date: 04/20/2017 -18:14:31 
date - 60min: 04/20/2017 -17:14:31 
+0

sí mi sistema operativo no lo admite, gracias de cualquier manera –

+0

Esto no funciona en 'date' enviado en Ubuntu. – Flimm

+0

@Flimm Esto funciona en OS X y espero que BSD también –

4

si es necesario restar con marca de tiempo:

timestamp=$(date +%s -d '1 hour ago'); 
1

Este trabajo en mi Ubuntu 16.04 date: date --date="@$(($(date +%s) - 3600))" "+%m/%d/%Y -%H:%M:%S" y la versión date es date (GNU coreutils) 8.25

Cuestiones relacionadas