IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Manipulation de formats de date


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Par défaut Manipulation de formats de date
    Bien l'bonjour,

    Dans un script, je souhaite faire quelques opérations sur des dates; pour cela, j'ai besoin de la date du jour, et d'une date qui figure dans un fichier (résultat d'une requete sql).

    Hélas, quand je tape la commande suivante:
    # date +%s -d '20091223, 11:26:29'
    le format de cette date n'est pas reconnu par le shell, donc je vais devoir en changer.

    J'aurais donc souhaité savoir sous quel format mettre cette date, histoire qu'elle puisse etre comprise par le shell. Ainsi, je pourrais la convertir en secondes (depuis le 01/01/1970), pour calculer la durée entre cette date et la date du jour.

    Merci d'avance pour votre aide.

    Muad

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    retire la virgule, ça devrait aller mieux.

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    voici un petit exemple plutot qu'une explication tordu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #une date en seconde (la veille ici)
    deb=$(date -d "1 day ago" +%s)
    #la date du jour en secondes (depuis 1970 sous unix)
    fin=$(date +%s)
    #la difference en secondes
    (( dif = $fin - $deb ))
    avec la commande "date" GNU.
    donc la date recupérée avec la commande sql devrait être en secondes sinon on peut faire la conversion avec la commande

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Par défaut
    Me revoilà,

    Alors pour la virgule, ca va au poil: un ptit coup de sed, et je remplace facilement la virgule par un espace.

    Par contre, jme suis rendu compte que ma date etait de la forme suivante:
    20091229-123059

    Il faudrait donc que je mette des ";" entre les heures;minutes;secondes... et c'est là que je bloque. J'ai bien tenté de me replonger dans les expressions régulières, mais j'arrive pas à trouver le bon truc.

    Pour info, je suis en shell sur une Debian.
    J'ai testé la ligne suivante, sans succès (ca me renvoi exactement le meme format de date):
    # sed 's/^[0-9]{8}-[0-9]{6}$/^[0-9]{8}_[0-9]{2};[0-9]{2};[0-9]{2}$/g' test

    Désolé si chui complètement à côté de la plaque, c'est surement à cause des vacances

  5. #5
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F '-' '{print $1, substr($2, 1, 2) ":" substr($2, 3, 2) ":" substr($2, 5, 2)}'
    transforme la chaine 20090723-123456 en 20090723 12:34:56

  6. #6
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Même traitement en utilisant sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/-/ /' -e 's/\(..\)\(..\)\(..\)$/\1:\2:\3/'

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Par défaut
    Superbe, c'est exactement ce qu'il me fallait

    Je fini ca et j'vais aller voir un peu plus en détail cette fonction awk^^ (et un ptit tour sur sed aussi me fera pas d'mal lol)

    Bonne journée a tous, et un grand merci pour votre aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Manipulation des formats date
    Par salmabarik dans le forum SAS Base
    Réponses: 1
    Dernier message: 26/07/2013, 08h06
  2. [AC-2003] Manipuler le format date/heure
    Par Fcnaatao dans le forum Access
    Réponses: 7
    Dernier message: 11/05/2012, 14h35
  3. Manipulation de format de date
    Par FMJ dans le forum Développement
    Réponses: 10
    Dernier message: 28/03/2011, 19h15
  4. Manipuler le format retourné pour une date.
    Par BlackMinou dans le forum Oracle
    Réponses: 3
    Dernier message: 05/04/2006, 18h01
  5. Réponses: 3
    Dernier message: 06/05/2002, 18h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo