La chaîne de date et heure est au format suivant: 06/12/2012 07:21:22. Comment puis-je le convertir en horodatage ou époque UNIX?
Ce que vous cherchez, c'est date --date='06/12/2012 07:21:22' +"%s"
. N'oubliez pas que cela suppose que vous utilisez GNU coreutils, étant donné que --date
et la chaîne de formatage %s
sont des extensions GNU. POSIX ne spécifiant aucun de ces éléments, il n’existe donc aucun moyen portable de procéder à cette conversion, même sur des systèmes compatibles POSIX.
Consultez la page de manuel appropriée pour connaître les autres versions de date
.
Remarque: Les options bascode --date
et -d
prévoient que la date est au format US ou ISO 8601, c'est-à-dire mm/dd/yyyy
ou yyyy-mm-dd
, pas au Royaume-Uni, dans l'UE ou dans tout autre format.
Pour Linux Exécutez cette commande
date -d '06/12/2012 07:21:22' +"%s"
Pour mac OSX, lancez cette commande
date -j -u -f "%a %b %d %T %Z %Y" "Tue Sep 28 19:35:15 EDT 2010" "+%s"
Beaucoup de ces réponses sont trop compliquées et manquent également d’utilisation des variables. Voici comment procéder plus simplement sur un système Linux standard (comme mentionné précédemment, la commande de date devra être ajustée pour les utilisateurs Mac):
Exemple de script:
#!/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"
Résulte en :
RESULTS:
original = Apr 28 07:50:01
Epoch conv = 1524916201
Epoch to human readable time stamp = 20180428_075001
Ou en fonction:
# -- 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
}
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
}
Lorsque Daniel Kamil Kozar } _ a correctement répondu, date
est l'outil
Je veux juste ajouter une façon particulière de les utiliser, surtout si vous avez plusieurs date à convertir:
Au lieu d'exécuter 1 fork par date à convertir, exécutez date
une seule fois et effectuez toutes les conversions avec le même processus (cela pourrait devenir beaucoup plus rapide)!
date -f - +%s <<eof
Apr 17 2014
May 21 2012
Mar 8 00:07
Feb 11 00:09
eof
1397685600
1337551200
1520464020
1518304140
Échantillon:
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" )
Alors maintenant, regardez:
declare -p start1 start2 dirchg userdate
(peut répondre à quelque chose comme:
declare -- start1="1518549549" declare -- start2="1520183716" declare -- dirchg="1520601919" declare -- userdate="1397685600"
Nous avons juste besoin d'un fifo:
mkfifo /tmp/myDateFifo
exec 7> >(exec stdbuf -o0 /bin/date -f - +%s >/tmp/myDateFifo)
exec 8</tmp/myDateFifo
rm /tmp/myDateFifo
(Remarque: lorsque le processus est en cours et que tous les descripteurs sont ouverts, nous pouvons supprimer en toute sécurité l'entrée du système de fichiers de fifo.)
Alors maintenant:
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
Nous pourrions construire une petite fonction:
mydate() {
local var=$1;
shift;
echo >&7 $@
read -u 8 $var
}
mydate start1 $(LANG=C ps ho lstart 1)
echo $start1
newConnector
Vous pouvez les trouver dans des versions différentes sur GitHub , ou sur mon site .
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