4

Я нашел решение о том, как преобразовать часовой пояс с помощью команды Linux date : Преобразование часового пояса с помощью командной строки

$ date --date='TZ="Asia/Taipei" 18:00'
Fri Jul 16 11:00:00 BST 2010

Он отлично работает, но я не могу понять, как использовать его в скрипте Bash, когда время является переменной, например:

TIME=18:00
DATE="`date --date='TZ="Asia/Taipei" $TIME' +%F\ %H:%M`"
echo $DATE;

У меня проблемы с экранированием специальных символов. И я совершенно не понимаю, почему команда date работает с часовыми поясами, такими как BST, EET и т.д., А не с часовыми поясами, такими как «Азия / Тайбэй», Европа / Москва и т.д.

1 ответ1

6

В man bash есть раздел под названием QUOTING . Я предлагаю вам прочитать его или справочное руководство Bash по цитированию .

Правильная командная строка будет:

DATE=$( date --date="TZ=\"Asia/Taipei\" $TIME" +%F\ %H:%M )
  • Использование $( ) предотвращает некоторые проблемы с кавычками , возникающие при использовании обратных галочек.
  • Вам необходимо заключить в кавычки как часовой пояс (очевидно, по причинам форматирования), так и заключить в кавычки аргумент, чтобы разрешить подстановку переменных, поэтому просто экранируйте внутренние кавычки один раз.

Я не уверен, что вы спрашиваете в своем последнем абзаце, но учтите, что отображение континента / города в часовой пояс не является биективным. Учитывая дату и время в часовом поясе, вы не сможете узнать, что это за город. Несколько файлов в /usr/share/zoneinfo имеют одинаковую информацию о часовом поясе. Кроме того, это зависит от того, когда вы выполняете команду, из-за перехода на летнее время, областей, меняющих свой часовой пояс, или из-за других странностей, связанных с датой.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .