Forum Programmation.shell Date - Inversion jour/mois

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
2
22
jan.
2021

Bonjour à tous,

Je pensais avoir fait le tour de la commande date mais je viens de tomber sur un os !

Si je tape :

date -d "03/02/2020"

j'obtiens :

lundi 2 mars 2020, 00:00:00 (UTC+0100)

J'en déduis qu'il considère que le format par défaut est mm/jj/aaaa.
Alors je tape :

date -d "03/02/2020" "+%d/%m/%Y"

pour forcer le format mais j'obtiens :

02/03/2020

Donc, toujours le 2 mars et non le 3 février comme je voudrais.

Pour m'assurer que je ne divague pas, si je tape :

date -d "13/02/2020" "+%d/%m/%Y"

il me retourne :

date: date «13/02/2020» incorrecte

ce qui prouve bien que, malgré mon format, il considère que la date est bien dans le format mm/jj/aaaa.

Que dois-je faire pour qu'il considère que je lui rentre une date au format jj/mm/aaaa ?
Merci pour votre aide.

  • # 3 février 2020

    Posté par  . Évalué à 1 (+0/-1).

    date -d "03/02/2020" "+%m/%d/%Y"    
    03/02/2020
  • # Locale

    Posté par  (site Web personnel) . Évalué à 5 (+3/-0).

    Je pense que ton système est réglé avec des paramètres régionaux américains. Tu peux vérifier ça avec la commande locale, et régler ça avec update-locale (à chercher sur le web), et peut être en graphique si tu as un environnement de bureau.

    La chaine "+%d/%m/%Y" ne force pas la commande date à interpréter la date selon ce format, mais à la restituer selon ce format (ce qu'elle fait correctement si la locale n'est pas FR)

    Un LUG en Lorraine : https://enunclic-cappel.fr

    • [^] # Re: Locale

      Posté par  (site Web personnel) . Évalué à 9 (+8/-0). Dernière modification le 23/01/21 à 06:33.

      Tout à fait d'accord avec toi pour la notation +.

      A priori, mauvaise piste pour les paramètres régionaux : date lui répond en français. Mais vérifions…

      La page de manuel :

             -d, --date=STRING
                    display time described by STRING, not 'now'
      …
      DATE STRING
             The --date=STRING is a mostly free format human readable date string such as "Sun, 29 Feb  2004  16:21:42
             -0800" or "2004-02-29 16:21:42" or even "next Thursday".  A date string may contain items indicating cal‐
             endar date, time of day, time zone, day of week, relative time, relative date,  and  numbers.   An  empty
             string  indicates  the beginning of the day.  The date string format is more complex than is easily docu‐
             mented here but is fully described in the info documentation.
      

      La page info :

      28.2 Calendar date items
      ========================
      
      A “calendar date item” specifies a day of the year.  It is specified
      differently, depending on whether the month is specified numerically or
      literally.  All these strings specify the same calendar date:
      
           1972-09-24     # ISO 8601.
           72-9-24        # Assume 19xx for 69 through 99,
                          # 20xx for 00 through 68.
           72-09-24       # Leading zeros are ignored.
           9/24/72        # Common U.S. writing.
           24 September 1972
           24 Sept 72     # September has a special abbreviation.
           24 Sep 72      # Three-letter abbreviations always allowed.
           Sep 24, 1972
           24-sep-72
           24sep72
      
         The year can also be omitted.  In this case, the last specified year
      is used, or the current year if none.  For example:
      
           9/24
           sep 24
      
         Here are the rules.
      
         For numeric months, the ISO 8601 format ‘YEAR-MONTH-DAY’ is allowed,
      where YEAR is any positive number, MONTH is a number between 01 and 12,
      and DAY is a number between 01 and 31.  A leading zero must be present
      if a number is less than ten.  If YEAR is 68 or smaller, then 2000 is
      added to it; otherwise, if YEAR is less than 100, then 1900 is added to
      it.  The construct ‘MONTH/DAY/YEAR’, popular in the United States, is
      accepted.  Also ‘MONTH/DAY’, omitting the year.
      
         Literal months may be spelled out in full: ‘January’, ‘February’,
      ‘March’, ‘April’, ‘May’, ‘June’, ‘July’, ‘August’, ‘September’,
      ‘October’, ‘November’ or ‘December’.  Literal months may be abbreviated
      to their first three letters, possibly followed by an abbreviating dot.
      It is also permitted to write ‘Sept’ instead of ‘September’.
      
         When months are written literally, the calendar date may be given as
      any of the following:
      
           DAY MONTH YEAR
           DAY MONTH
           MONTH DAY YEAR
           DAY-MONTH-YEAR
      
         Or, omitting the year:
      
           MONTH DAY
      

      La notation US est très ancrée…

      Pour ma part, je préfère toujours ISO 8601 (YYYY-MM-DD) pour toute date (aucune ambiguïté possible, ça se trie trivialement, etc.), et c'est accepté par date.

      Debian Consultant @ DEBAMAX

      • [^] # Re: Locale

        Posté par  . Évalué à 1 (+0/-0).

        Je suis bien d'accord, le format YYYY-MM-DD ou même YYYYMMDD est bien plus simple, clair, facile.
        Malheureusement, je n'ai pas la main sur ce format, je dois faire avec.

    • [^] # Re: Locale

      Posté par  . Évalué à 1 (+0/-0).

      Désolé pour le retour tardif, d'autres tâches requéraient mon attention.

      locate me retourne une réponse franco-française :

      LANG=fr_FR.UTF-8
      LANGUAGE=
      LC_CTYPE="fr_FR.UTF-8"
      LC_NUMERIC="fr_FR.UTF-8"
      LC_TIME="fr_FR.UTF-8"
      LC_COLLATE="fr_FR.UTF-8"
      LC_MONETARY="fr_FR.UTF-8"
      LC_MESSAGES="fr_FR.UTF-8"
      LC_PAPER="fr_FR.UTF-8"
      LC_NAME="fr_FR.UTF-8"
      LC_ADDRESS="fr_FR.UTF-8"
      LC_TELEPHONE="fr_FR.UTF-8"
      LC_MEASUREMENT="fr_FR.UTF-8"
      LC_IDENTIFICATION="fr_FR.UTF-8"
      LC_ALL=

  • # Impossible ?

    Posté par  . Évalué à 8 (+6/-0). Dernière modification le 22/01/21 à 22:44.

    Je ne suis pas spécialiste mais en lisant l'aide de date, je ne suis pas sûr que cela soit possible de le faire au niveau de la commande date.

    Quand tu ajoutes quelques choses du style +%d/%m/%y, date ne le comprend pas comme le format de ton entrée mais comme le format que tu souhaites en sortie.

    Surtout, ne pas tout prendre au sérieux !

    • [^] # Re: Impossible ?

      Posté par  . Évalué à 2 (+1/-0).

      Je suis arrivé exactement à la même conclusion.
      Du coup mon problème reste entier : comment faire comprendre que ma date est au format DD/MM/YYYY ?

      En attendant de trouver mieux, je vais "retourner" le jour et le mois pour être dans le format qu'il attend. C'est pas génial, j'en conviens.

      Merci à tous pour vos participations.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.