Могу ли я получить смещение UTC из командной строки Unix?

Я пишу autoconf script, которому требуется текущее смещение UTC. Нет очевидного способа получить это из программы с датой. Есть ли простой способ получить это из командной строки, или я должен написать тест, который получает информацию и каким-то образом ее захватывает?

Ответ 1

Попробуйте это и посмотрите, работает ли оно для вас:

date +%z

Ответ 2

Для других, выполняющих ISO8601, вы можете выбрать какой-либо вариант:

date +%Y%m%dT%H%M%S%z     # 20140809T092143-0700
date -u +%Y%m%dT%H%M%S%z  # 20140809T162143+0000
date -u +%Y%m%dT%H%M%SZ   # 20140809T162143Z

Мне нравятся те, потому что отсутствие пунктуации поддерживает универсальное использование. Обратите внимание, что капитал Z "жестко запрограммирован" для UTC - использование% Z будет устанавливать UTC или другую именованную часовую зону. Если вы предпочитаете знаки препинания:

date +%Y-%m-%dT%H:%M:%S%z      # 2014-08-09T09:21:43-0700
date +%Y-%m-%dT%H:%M:%S%:z     # 2014-08-09T09:21:43-07:00 - NOT ALL SYSTEMS
date -u +%Y-%m-%dT%H:%M:%S%z   # 2014-08-09T16:21:43+0000
date -u +%Y-%m-%dT%H:%M:%S%:z  # 2014-08-09T16:21:43+00:00 - NOT ALL SYSTEMS
date -u +%Y-%m-%dT%H:%M:%SZ    # 2014-08-09T16:21:43Z

Обратитесь к man strftime, поскольку поддерживаемые форматы различаются. Например, некоторые системы поддерживают вставку двоеточий в смещение с использованием%: z,%:: z или%: z - только две из моих пяти систем (Debian, Ubuntu do, но Mac, BusyBox, QNX нет),

И я часто возвращаюсь к https://en.wikipedia.org/wiki/ISO_8601 для справки.

Ответ 3

Да, date может сделать это:

[[email protected]:~] date -R
Mon, 02 May 2011 17:37:45 +0100

Или, точнее:

[[email protected]:~] date -R | awk '{print $6}'
+0100
[[email protected]:~] date +%z
+0100

Чтение date --help очень полезно.