script now minus day current bash shell date

now - Convertir cadena de fecha y hora a época en Bash



printf date bash (5)

La cadena de fecha y hora está en el siguiente formato: 06/12/2012 07:21:22. ¿Cómo puedo convertirlo a UNIX timestamp o epoch?


Convierta la cadena de fecha y hora a la marca de hora de UNIX en el comando bash

Como Daniel Kamil Kozar respondió correctamente, la date es la herramienta correcta.

Solo quiero agregar una forma particular de usarlos, sobre todo si tienes muchas fechas para convertir:

En lugar de ejecutar 1 fork por fecha para convertir, ejecuta la date solo 1 vez y realiza todas las conversiones con el mismo proceso (¡esto podría ser mucho más rápido) !:

date -f - +%s <<eof Apr 17 2014 May 21 2012 Mar 8 00:07 Feb 11 00:09 eof 1397685600 1337551200 1520464020 1518304140

Muestra:

start1=$(LANG=C ps ho lstart 1) start2=$(LANG=C ps ho lstart $$) dirchg=$(LANG=C date -r .) read -p "A date: " userdate { read start1 ; read start2 ; read dirchg ; read userdate ;} < <( date -f - +%s <<<"$start1"$''/n''"$start2"$''/n''"$dirchg"$''/n''"$userdate" )

Entonces ahora mira:

declare -p start1 start2 dirchg userdate

(puede responder algo como:

declare -- start1="1518549549" declare -- start2="1520183716" declare -- dirchg="1520601919" declare -- userdate="1397685600"

Usando el subproceso de larga ejecución

Solo necesitamos una fifo :

mkfifo /tmp/myDateFifo exec 7> >(exec stdbuf -o0 /bin/date -f - +%s >/tmp/myDateFifo) exec 8</tmp/myDateFifo rm /tmp/myDateFifo

(Nota: A medida que se ejecuta el proceso y se abren todos los descriptores, podemos eliminar de forma segura la entrada del sistema de archivos de fifo).

Entonces ahora:

LANG=C ps ho lstart 1 $$ >&7 read -u 8 start1 read -u 8 start2 LANG=C date -r . >&7 read -u 8 dirchg read -p "Some date: " userdate echo >&7 $userdate read -u 8 userdate

Podríamos construir una pequeña función:

mydate() { local var=$1; shift; echo >&7 $@ read -u 8 $var } mydate start1 $(LANG=C ps ho lstart 1) echo $start1

O usa mi función newConnector

Puede encontrarlos en versiones diferentes en GitHub , o en mi sitio .

wget https://raw.githubusercontent.com/F-Hauri/Connector-bash/master/shell_connector.bash . shell_connector.bash newConnector /bin/date ''-f - +%s'' @0 0 myDate "2018-1-1 12:00" test echo $test 1514804400


Muchas de estas respuestas son demasiado complicadas y tampoco se sabe cómo usar variables. Así es como lo haría de manera más simple en un sistema Linux estándar (como se mencionó anteriormente, el comando de fecha debería ajustarse para los usuarios de Mac):

Secuencia de comandos de muestra:

#!/bin/bash orig="Apr 28 07:50:01" epoch=$(date -d "${orig}" +"%s") epoch_to_date=$(date -d @$epoch +%Y%m%d_%H%M%S) echo "RESULTS:" echo "original = $orig" echo "epoch conv = $epoch" echo "epoch to human readable time stamp = $epoch_to_date"

Resultados en:

RESULTS: original = Apr 28 07:50:01 epoch conv = 1524916201 epoch to human readable time stamp = 20180428_075001

O como una función:

# -- Converts from human to epoch or epoch to human, specifically "Apr 28 07:50:01" human. # typeset now=$(date +"%s") # typeset now_human_date=$(convert_cron_time "human" "$now") function convert_cron_time() { case "${1,,}" in epoch) # human to epoch (eg. "Apr 28 07:50:01" to 1524916201) echo $(date -d "${2}" +"%s") ;; human) # epoch to human (eg. 1524916201 to "Apr 28 07:50:01") echo $(date -d "@${2}" +"%b %d %H:%M:%S") ;; esac }


Para Linux, ejecute este comando

date -d ''06/12/2012 07:21:22'' +"%s"

Para mac OSX ejecuta este comando

date -j -u -f "%a %b %d %T %Z %Y" "Tue Sep 28 19:35:15 EDT 2010" "+%s"


Lo que estás buscando es date --date=''06/12/2012 07:21:22'' +"%s" . Tenga en cuenta que esto supone que está utilizando coreutils de GNU, ya que ambos --date y la cadena de formato %s son extensiones de GNU. POSIX no especifica ninguno de estos, por lo que no existe una forma portátil de realizar dicha conversión incluso en sistemas que cumplen con POSIX.

Consulte la página del manual correspondiente para conocer otras versiones de la date .

Nota: las --date bash --date y -d esperan la fecha en formato US o ISO8601, es decir, mm/dd/yyyy o yyyy-mm-dd , no en el Reino Unido, la UE ni en ningún otro formato.


get_curr_date () { # get unix time DATE=$(date +%s) echo "DATE_CURR : "$DATE } conv_utime_hread () { # convert unix time to human readable format DATE_HREAD=$(date -d @$DATE +%Y%m%d_%H%M%S) echo "DATE_HREAD : "$DATE_HREAD }