Unix TimeStamp - Конвертация времени

Рейтинг: 0Ответов: 1Опубликовано: 11.04.2011

Вот нашел такое решение:

date -d "$(echo "05/Apr/2010:00:22:46 +0300" | perl -pe 's/\//-/g ; s/:/ /')" +%s

На выводе получаем дату в секундах с 19700101 (1270416166). Проблема в том, что передается месяц в строковом формате. При попытке подачи в числовом - неправильный формат даты.

Помогите, пожалуйста. Как конвертировать, например, такую строку:

05-04-2010 00:22:46

в Unix TimeStamp формат.

Ответы

▲ 2Принят

Есть решение, приятное тем, что использует только стандартную утилиту date:

date --date="2010-04-05 00:22:46" +%s

Но есть недостаток: именно тот формат, который Вам нужен, date не понимает (поскольку он не очень распространён в США, думаю).
Цитата из мана:

The --date=STRING is a mostly free format human readable date string such as "Sun, 29 Feb 2004 16:21:42 -0800" or "2004-02-29 16:21:42" or even "next Thursday". A date string may contain items indicating calendar date, time of day, time zone, day of week, relative time, relative date, and numbers. An empty string indicates the beginning of the day. The date string format is more complex than is easily documented here but is fully described in the info documentation.

Если нужен именно тот формат, ну переставьте там числа местами с помощью sed.


Бонус: комплект с мега-сложным perl-скриптом, переворачивающим дату:

date -d "$(echo "05-04-2010 00:22:46 +0300" | perl -pe 's/(\d+)-(\d+)-(\d+)/\3-\2-\1/;')" +%s