Ungültiger Datumsfehler nach Datumsbefehl

7

Ich möchte die Datumsinformationen mit diesem Befehl erhalten:

date --date=2019-03-22

oder

date --date=2019/03/22

aber es zeigt diesen Fehler:

date: invalid date ‘2019-03-22’

oder

 date: invalid date ‘2019/03/22’

Wie Sie sehen können, hat es nichts mit Bindestrich zu tun. Das gleiche passiert mit Schrägstrich.

Wenn ich ein anderes Datum wie benutze

date --date=2019-03-21

Es zeigt die Informationen korrekt an.

Es sollte nicht mit dem schlechten Strichcharakter zusammenhängen. weil ich gerade den letzten gelöscht 2und durch ersetzt habe 1und die Ausgabe in Ordnung ist.

Was läuft falsch?

Ergebnis einiger Befehle für weitere Informationen:

$ 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

In diesem Datum ist etwas Seltsames mit einer anderen Zeitzone los : 2019-03-22. Ich habe die Zeitzone zufällig in verschiedene Bereiche geändert. Einige von ihnen haben Fehler, andere nicht! Wenn ich diese auswähle, habe ich ein Problem mit diesem bestimmten Datum:

  • Los Angeles (USA)
  • Shanghai, China)
  • Madrid, Spanien)
EIS
quelle
Kommentare sind nicht für eine ausführliche Diskussion gedacht. Dieses Gespräch wurde in den Chat verschoben .
Thomas Ward

Antworten:

5

Ich bin mir fast sicher, dass dies auf die Umstellung auf Sommerzeit in der angegebenen Zeitzone zurückzuführen ist: Dies bedeutet effektiv, dass eine Stunde "verschwindet" (und somit " invalid" wird).

In meiner eigenen Zeitzone begann die Sommerzeit am Sonntag, dem 10. März, um 2 Uhr morgens, sodass diese Stunde ungültig ist:

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

während die Zeiten unmittelbar davor und danach gültig sind:

$ 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

In Zeitzonen, in denen die Umstellung um Mitternacht erfolgt, erscheint das bloße Datum ungültig, da GNU dateeine Zeit von Mitternacht annimmt:

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

aber eine Stunde später ist gültig:

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

Siehe auch Ungültiges Datum Linux

Steeldriver
quelle
Vielen Dank, das Hinzufügen der aktuellen Zeit hat das Problem behoben.
ICE
Sie "wechseln um Mitternacht zur Sommerzeit" sollten für den 22.03.2019 kein Problem sein, da der Benutzer TZ derzeit PDT ist.
Glenn Jackman
Die Neuinstallation des tzdataPakets hat das Problem für mich behoben. Jetzt hat nur eine Zeitzone einen Fehler, wie Sie in Ihrer Antwort erklärt haben, ohne Zeit hinzuzufügen. Ich weiß nicht, was mit dem tzdataPaket schief gelaufen ist , habe aber sogar TZ=America/Toronto date --date="2019-03-10 02:00:00"das Ergebnis ohne Fehler zurückgegeben, bevor ich das tzdataPaket neu installiert habe . Vielen Dank für Ihre Zeit.
ICE
4
$ 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

und

$ 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’
Glenn Jackman
quelle
Es scheint, dass etwas mit der Zeitzone in meinem System nicht stimmt :(
ICE
1
Sie sollten das tzdataPaket neu installieren .
Glenn Jackman