web-dev-qa-db-fra.com

Erreur de date non valide par la commande date

Je veux obtenir les informations de date avec cette commande:

date --date=2019-03-22

ou

date --date=2019/03/22

mais il montre cette erreur:

date: invalid date ‘2019-03-22’

ou

 date: invalid date ‘2019/03/22’

comme vous pouvez le voir, ce n'est pas lié au tiret. la même chose se produit avec la barre oblique.

Quand j'utilise une autre date comme

date --date=2019-03-21

Il affiche correctement les informations.

Il ne doit pas être lié au mauvais caractère de tiret. parce que je viens de supprimer le dernier 2 et l'a remplacé par 1 et la sortie est OK.

Qu'est-ce qui ne va pas?

Résultat de certaines commandes pour plus d'informations:

$ date --version
date (GNU coreutils) 8.28
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David MacKenzie.
$ type -a date
date is /bin/date
$ uname -m
x86_64
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:    18.04
Codename:   bionic
$ which date
/bin/date
$ apt-cache policy coreutils
coreutils:
  Installed: 8.28-1ubuntu1
  Candidate: 8.28-1ubuntu1
  Version table:
 *** 8.28-1ubuntu1 500
        500 http://us.archive.ubuntu.com/ubuntu bionic/main AMD64 Packages
        100 /var/lib/dpkg/status
$ date
Fri Mar 22 06:54:59 PDT 2019
date --date=2019-03-22 2>&1 | od -c
0000000   d   a   t   e   :       i   n   v   a   l   i   d       d   a
0000020   t   e     342 200 230   2   0   1   9   -   0   3   -   2   2
0000040 342 200 231  \n
0000044

Quelque chose de bizarre se passe avec un fuseau horaire différent à cette date: 2019-03-22. J'ai changé au hasard le fuseau horaire en différentes zones. Certains d'entre eux ont des erreurs, d'autres non! Lorsque je les sélectionne, j'ai un problème avec cette date spécifique:

  • Los Angeles (USA)
  • Shangai, Chine)
  • Madrid, Espagne)
7
ICE

Je suis presque sûr que cela est dû au passage à l'heure d'été dans le fuseau horaire donné: cela signifie effectivement qu'une heure "disparaît" (et devient donc "invalid").

Dans mon propre fuseau horaire, l'heure d'été a commencé à 2 heures du matin le dimanche 10 mars, de sorte que l'heure n'est pas valide:

$ cat /etc/timezone
America/Toronto
$ date --date="2019-03-10 02:00:00"
date: invalid date ‘2019-03-10 02:00:00’

alors que les heures immédiatement avant et après sont valables:

$ date --date="2019-03-10 01:59:59"
Sun Mar 10 01:59:59 EST 2019

$ date --date="2019-03-10 03:00:00"
Sun Mar 10 03:00:00 EDT 2019

Dans les fuseaux horaires où le changement se produit à minuit, la date nue semble invalide car GNU date suppose une heure de minuit:

$ TZ=Asia/Tehran date --date='2019-03-22'
date: invalid date ‘2019-03-22’

mais une heure plus tard est valable:

$ TZ=Asia/Tehran date --date='2019-03-22 01:00:00'
Fri Mar 22 01:00:00 +0430 2019

Voir aussi Invalid Date Linux

5
steeldriver
$ date_ascii="2019-03-22"
$ printf "%s" "$date_ascii" | od -c
0000000   2   0   1   9   -   0   3   -   2   2
0000012
$ TZ=Asia/Shanghai date -d "$date_ascii"
Fri Mar 22 00:00:00 America 2019

et

$ date_unicode="2019‑03‑22"
$ printf "%s" "$date_unicode" | od -c
0000000   2   0   1   9 342 200 221   0   3 342 200 221   2   2
0000016
$ TZ=Asia/Shanghai date -d "$date_unicode"
date: invalid date ‘2019‑03‑22’
4
glenn jackman