Преобразование метки времени Unix в строку даты
есть ли быстрый, однострочный способ преобразования метки времени Unix в дату из командной строки Unix?
date может работать, за исключением того, что довольно неудобно указывать каждый элемент (месяц, день, год, час и т. д.), и я не могу понять, как заставить его работать должным образом. Похоже, что может быть более простой способ - я что-то упускаю?
9 ответов:
С GNU
dateвы можете сделать:date -d "@$TIMESTAMP"# date -d @0 Wed Dec 31 19:00:00 EST 1969(из: BASH: преобразование unix Timestamp в дату)
в OS X Используйте
date -r.date -r "$TIMESTAMP"в качестве альтернативы, используйте
strftime(). Он не доступен непосредственно из оболочки, но вы можете получить к нему доступ через поглазеть. Элемент%cспецификатор отображает метку времени в зависимости от локали.echo "$TIMESTAMP" | gawk '{print strftime("%c", )}'# echo 0 | gawk '{print strftime("%c", )}' Wed 31 Dec 1969 07:00:00 PM EST
это решение работает с версиями даты, которые не поддерживают
date -d @. Это не требует AWK или другие команды. Метка времени Unix - это количество секунд с 1 января 1970 года, UTC, поэтому важно указать UTC.date -d '1970-01-01 1357004952 sec UTC' Mon Dec 31 17:49:12 PST 2012если вы находитесь на Mac, то используйте:
date -r 1357004952команда для получения эпохи:
date +%s 1357004952кредит идет к Антону: BASH: преобразование unix Timestamp в дату
как говорит @TomMcKenzie в комментарии к другому ответу,
date -r 123456789возможно, более распространенное (т. е. более широко реализованное) простое решение для времени, заданного в секундах с эпохи Unix, но, к сожалению, нет универсального гарантированного портативного решения.The
-dопция на многих типах систем означает что-то совершенно другое, чем GNU Date
Если вы находите нотацию неудобной, возможно,
-R-возможность помочь. Он выводит дату в формате RFC 2822. Так что вам не понадобятся все эти идентификаторы:date -d @1278999698 -R. Другая возможность-вывести дату в секундах в вашей локали:date -d @1278999698 +%c. Должно быть легко запомнить. : -)
стандартное решение Perl:
echo $TIMESTAMP | perl -nE 'say scalar gmtime $_'(или местное время, если предпочтительно)
небольшая поправка к ответу dabest1 выше. Укажите часовой пояс в формате UTC, а не GMT:
$ date -d '1970-01-01 1416275583 sec GMT' Tue Nov 18 00:53:03 GMT 2014 $ date -d '1970-01-01 1416275583 sec UTC' Tue Nov 18 01:53:03 GMT 2014второй является правильным. Я думаю, причина в том, что в Великобритании переход на летнее время действовал постоянно с 1968 по 1971 год.