SHELL Transformer timestamp en date

Résolu
Bonjour,

Est-il possible de transformer un timestamp en date en shell ?

Apparemment non ?

Merci !
Configuration: Windows XP
Firefox 2.0.0.3

14 réponses

  1. date -d @<timestamp>

    Par exemple:

    host:# date -d @1320310698.194
    jeudi 3 novembre 2011, 09:58:18 (UTC+0100)
    1. Salut,

      en fait jai reglé le probleme plus facilement que prévus !
      EN perl DEPUIS un shell, ca nous donnes :

      # TimeStamp vers Date
      # perl -e "print scalar(localtime(1173279767))"

      et

      # Date vers TimeStamp
      perl -e "use POSIX ; print (mktime(10,45,11,31,4,107));"

      plus d'information sur les valeurs necessaire au mktime
      ==>

      # mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
      #
      # The month (mon), weekday (wday), and yearday (yday) begin at zero.
      # The year (year) is given in years since 1900.
      # Sunday is 0, not 1;
      # January 1st is 0, not 1.
      #
      # I.e. January is 0, not 1;
      # I.e. The year 1995 is 95; the year 2001 is 101.
      # I.e. Calendar time for December 12, 1995, at 10:30 am : mktime( 0, 30, 10, 12, 11, 95 );
      #
      # Greenwich Mean Time (GMT)
      # Daylight saving Time (DST)
      # Coordinated Universal Time (CUT)
      ##################################

      Voilou, j'suis content, j'affiche tous mes graphs a la date desiré
      Me suis fait une petite interface simple en html qui pointe
      vers un CGI (en faite en ksh) qui recupere les valeurs, les
      format ent correctement grace a la commande perl mktime
      et je graph le tout avec rddtool. En suis bien sur un affiche
      simple des images <img src=....

      Merci quand meme pour les réponses
      +
      1. Contributeur
        C'est dans shellutils

        Previously these utilities were offered as three individual sets of GNU utilities, Fileutils, Shellutils, and Textutils. Those three have been combined into a single set of utilities called Coreutils.
        1. Hélas po possible.

          Par contre, y'a d'autre solution sans passer par la commande DATE
          exemple en perl :

          #!/usr/bin/perl
          use POSIX;

          $sec = 0;
          $min = 0;
          $hour = 0;
          $mday = 01;
          $mon = 10;
          $year = 105;
          $wday = ?;
          $yday = ?;
          $timestamp = mktime($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,-1);
          print ($timestamp);

          ca ca marche plustot bien,
          je sais qu'il existe aussi une commande sous php assez simple qui permet de passer tres simplement d'un timestanmp a une date et inverssement.

          Le probleme c'est qu'en php... j'y connais rien
          Ca vas se finir en cgi avec du perl cette histoire :)

          Je sais pas trop si vous connaisser RRDTOOL
          c'est un outils qui permet de generer des graphs (pour des stats)
          J'affiche deja des stats sur le cpu, reseau et autre pour
          1jour, 1semaine, 1mois, 1 année
          Apres j'aurais bien voulu rajouter une petite page en
          html ou php voir cgi qui permet via un calendrier de choisir
          le jour ou l'on veux voir les stats.

          d'ou ma question, date vers timestamp.
          Avec le script perl la, je peux assez facilement faire un petit cgi
          avec un menu deroulant pour laisser choisir la date, le mois, etc
          par contre... niveau fin de mois... 29 30 ou 31
          ca, je vois pas trop comment faire.
          J'ai trouvé un petit script en php de calendrier qui gere justement
          tout ca et me sort un jole a href=tutu.cgi?01202005

          d'ou ma question initial pour convertir une date en timestamp
          :)
          1. Modérateur
            Oui c'est sûr, mais tu voulais une solution, en voilà une, après c'est à toi d'ajuster en fonction de tes besoins.

            Et si tu faisais ça dans un environnement fils ?
            (date  200114362005; date +"%s")
            ;-))
            1. Dangereux comme commande ca !

              date 200114362005 => je vais seter la date a cette valeur

              extrait du man =>
              ....
              2. To set the date and time, enter: date 0217142590
              ....
              1. et cette commande ne fonctionne PAS sur unix (Aix)
                Il eût fallu pour cela le signaler, n'étant point devin malheureusement, et malgré tous mes efforts pour changer cette situation...

                ;-DDD

                Tant pis, merci quand meme.

                Charger et compiler quoi que ce soit sur une machine de prod n'est Hélas pas possible ;)

                Je vais donner un appercus de la config ca sera plus simple :

                Machine de production (pas de compilateur dessus)
                Pas d'installation de logiciel possible dessus (c'est de la prod)
                Aix 5.3 TL4 SP0

                Merci
                1. Modérateur
                  En regardant le "man date" d'AIX, peux-tu essayer ça s'il te plaît :
                  date  200114362005; date +"%s"
                  ;-))
              2. Merci pour la reponse, mais pour etre exact ca serait
                (dans le ca de local francais) :

                date -d 2005-10-20 +"%s
                et non
                date -d 2005-20-01 +"%s

                et cette commande ne fonctionne PAS sur unix (Aix)
                (sur linux, pas de probleme)
                Pour la simple et bonne raison qu'il n'y a pas de flag -D
                d'ou ma question.
                1. Modérateur
                  et cette commande ne fonctionne PAS sur unix (Aix)
                  Il eût fallu pour cela le signaler, n'étant point devin malheureusement, et malgré tous mes efforts pour changer cette situation...

                  ;-DDD
              3. Hug !

                Et l'inversse ??

                d'une date genre 2005-20-01 vers un timestamp
                le tout toujours en shell (sh, ksh... au choix)

                Thks
                1. Modérateur
                  Salut,

                  Comme disait la SNCF dans les années 80, "si c'est possible" :
                   date -d "1970-01-01 UTC + 1164128484 seconds"
                  Tu peux changer le temps universel (UTC) par (CET) si besoin était ;-))