Как преобразовать UTC в местное время в сценарии оболочки на Linux - PullRequest
4 голосов
/ 22 июля 2011

У меня есть строка в формате

20110724T080000Z

, и я хочу преобразовать ее в местное время в сценарии оболочки на linux.Я думал, что просто мог бы дать это в качестве ввода для даты, но я, кажется, не могу сказать дату, в каком формате моя дата ввода.

этот

date -d "20110724T080000Z" -u

сделает датупожаловаться

date: invalid date `20110724T080000Z'

Кроме того, как называется формат формы "20110724T080000Z"?У меня был небольшой успех, пытаясь найти его в Google.

Ответы [ 3 ]

3 голосов
/ 22 июля 2011

Это ISO8601 "базовый формат" для комбинированной даты и времени. date, кажется, не в состоянии анализировать 20110724T080000Z, но если вы готовы выполнить несколько подстановок строк, он правильно анализирует 20110724 08:00:00Z.

1 голос
/ 22 июля 2011

это называется зулусское время. Это так же, как UCT, который раньше назывался GMT. Он используется с военными для указания UCT, поэтому не возникает путаницы в переписке.

http://en.wikipedia.org/wiki/Date_(Unix)

эта команда должна работать согласно википедии:

date [-u | --utc | --universal] [mmddHHMM [[cc] yy] [[. SS]] Единственная допустимая опция для этой формы указывает Всемирное координированное время.

0 голосов
/ 22 июля 2011

Вы можете попробовать воспользоваться perl:

perl -e 'распечатать скалярное местное время (смещение), "\ n"' 20110724T080000Z

Хотя у вас может бытьнемного подправить это, чтобы заставить его работать правильно.Хорошо, я не знаю точно, почему Perl-версия не справляется, но вот версия Ruby, которую я попробовал, хотя я не могу выбрать время хорошо:

ruby -e "require 'date'; вывести Date.strptime ('20110724T080000Z', '% Y% m% dT% H% M% SZ'). ctime"

дает:

Вс 24 июля 00:00:00 2011

...