Дата отправки в URL - PullRequest
       12

Дата отправки в URL

1 голос
/ 08 июня 2011

Мне нужно отправить дату (в формате 2011-06-07T05: 34: 28 + 0200) в HTTP-запросе POST.Чтобы это работало, мне нужно изменить «+» или «-» часового пояса на «% 2B» или «% 2D» соответственно.Каков наиболее эффективный способ сделать это в однострочнике bash / sed?

Следующее изменяет только «+», так как существует один «+» (тот, что в часовом поясе).

d1=$(date +%Y-%m-%dT%H:%M:%S%z) // -> 2011-06-07T05:34:28+0200
d2=$(echo $d1 | sed -e 's/+/%2B/')

Как изменить символ «+» или «-» только в пределах часового пояса в одной команде?

Ответы [ 2 ]

1 голос
/ 08 июня 2011

В Perl вы можете попробовать это:

perl -M'POSIX strftime' -l -e'%rep=( "+" => "%2B", "-" => "%2D"); $d= strftime( "%Y-%m-%dT%H:%M:%S%z", localtime()); $d=~s{([+-])}{$rep{$1}}g; print $d'

в основном захватывает '+' или '-' и заменяет их соответствующим экранированным значением.

, но если подумать об этом, то должен быть модуль для экранирования URL для вас. И действительно, это то, что делает URI :: Escape, так что вы идете:

perl -M'POSIX strftime' -MURI::Escape  -l -e'$d= strftime( "%Y%%2D%m-%dT%H:%M:%S%z", localtime()); print uri_escape $d'

Не могу поверить, что нечего сокращать ужасный формат "%Y%%2D%m-%dT%H:%M:%S%z" strftime.

обновление : поэтому после того, как вы возьмете комментарий Гленна Джекмана и избавитесь от лишней переменной, окончательная строка будет:

perl -M'POSIX strftime' -MURI::Escape -E'say uri_escape strftime "%FT%T%z", localtime'
0 голосов
/ 14 апреля 2012
d1=$(date +%Y-%m-%dT%H:%M:%S%z)
d2=$(echo $d1 | sed -e 's/+([0-1][0-9]00)/%2B\1/' | sed -e 's/-([0-1][0-9]00)/%2D\1/')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...