Question Comment convertir des chaînes comme "19-FEB-12" en date d'époque sous UNIX


Sous UNIX, comment convertir des chaînes de date en millisecondes d'époque comme:

19-FEB-12
16-FEB-12
05-AUG-09

J'en ai besoin pour comparer ces dates avec l'heure actuelle sur le serveur.


23
2018-02-11 03:45


origine


Réponses:


Pour convertir une date en secondes depuis l'époque:

date --date="19-FEB-12" +%s

Époque actuelle:

date +%s

Donc, puisque vos dates sont dans le passé:

NOW=`date +%s`
THEN=`date --date="19-FEB-12" +%s`

let DIFF=$NOW-$THEN
echo "The difference is: $DIFF"

Utiliser BSD date commande, vous auriez besoin

$ date -j -f "%d-%B-%y" 19-FEB-12 +%s

Différences de GNU date:

  1. -j empêche date d'essayer de régler l'horloge
  2. Le format d’entrée doit être explicitement défini avec -f
  3. La date de saisie est un argument régulier, pas une option (à savoir. -d)
  4. Lorsqu'aucune heure n'est spécifiée avec la date, utilisez plutôt l'heure actuelle de minuit.

43
2018-02-11 04:00



Voici une façon d'utiliser GNU awk. Courir:

awk -f script.awk file

Contenu de script.awk:

BEGIN {

    n = systime()

    FS="-"
}

{
    t = mktime(sprintf("%d %d %d %d %d %d", "20" $3, convert($2), $1, 0, 0, 0))    

    printf "%.1f days ago\n", (n - t) / 60 / 60 / 24
}

function convert(m) {

    return(((index("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC", m) - 1) / 3) + 1)
}

Résultats:

358.6 days ago
361.6 days ago
1286.6 days ago

1
2018-02-11 04:35