Я хочу получить информацию даты с этой командой:
date --date=2019-03-22
или
date --date=2019/03/22
но это показывает эту ошибку:
date: invalid date ‘2019-03-22’
или
date: invalid date ‘2019/03/22’
поскольку Вы видите, что это не связано с тире. то же самое происходит с наклонной чертой.
Когда я использую другую дату как
date --date=2019-03-21
Это показывает информацию правильно.
Это не должно быть связано с плохим символом тире. потому что я просто удалил последнее 2
и замененный это 1
и вывод в порядке.
Что идет не так, как надо?
Результат некоторых команд для получения дополнительной информации:
$ 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
Что-то странное продолжение другого часового пояса на этой дате: 2019-03-22
. Я случайным образом изменил часовой пояс на различные области. У некоторых из них есть ошибки, некоторые из них нет! Когда я выбираю их, у меня есть проблема с той определенной датой:
Я почти уверен, что это происходит из-за переключения к Летнему времени в данном часовом поясе: эффективно это означает, что час "исчезает" (и следовательно становится"invalid
").
В моем собственном часовом поясе DST запустился в 2:00 в воскресенье 10-го марта, так, чтобы час был недопустим:
$ cat /etc/timezone
America/Toronto
$ date --date="2019-03-10 02:00:00"
date: invalid date ‘2019-03-10 02:00:00’
тогда как времена сразу прежде и после допустимы:
$ 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
В часовых поясах, где изменение происходит в полночь, пустая дата кажется недопустимой потому что GNU date
принимает время полуночи:
$ TZ=Asia/Tehran date --date='2019-03-22'
date: invalid date ‘2019-03-22’
но один час спустя допустимо:
$ TZ=Asia/Tehran date --date='2019-03-22 01:00:00'
Fri Mar 22 01:00:00 +0430 2019
См. также Недопустимую Дату Linux
$ 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
и
$ 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’