Есть ли быстрый однострочный способ преобразовать временную метку Unix в дату из командной строки Unix?
date
может работать, за исключением того, что довольно неудобно указывать каждый элемент (месяц, день, год, час и т. д.), и я не могу понять, как заставить его работать должным образом. Кажется, есть способ попроще - я что-то упускаю?
bash
shell
unix
unix-timestamp
chimeracoder
источник
источник
Ответы:
С GNU
date
вы можете:(От: BASH: преобразовать отметку времени Unix в дату )
В OS X используйте
date -r
.В качестве альтернативы используйте
strftime()
. Он недоступен непосредственно из оболочки, но вы можете получить к нему доступ через gawk . Спецификатор%c
отображает метку времени в зависимости от языкового стандарта.источник
date -d @1278999698 +'%Y-%m-%d %H:%M:%S'
Где число позади@
- это число в секундахисточник
date -r 1278999698 +'%Y-%m-%d %H:%M:%S'
(GMT) или простоdate -r 1278999698
Это решение работает с версиями date, которые не поддерживают
date -d @
. Для этого не требуется AWK или другие команды. Временная метка Unix - это количество секунд с 1 января 1970 года по всемирному координированному времени, поэтому важно указать время в формате UTC.Если у вас Mac, используйте:
Команда для получения эпохи:
Кредит принадлежит Антону: BASH: преобразование отметки времени Unix в дату
источник
Как говорит @TomMcKenzie в комментарии к другому ответу,
date -r 123456789
возможно, это более распространенное (то есть более широко реализованное) простое решение для времени, указанного в секундах, начиная с эпохи Unix, но, к сожалению, нет универсального гарантированного переносимого решения.Параметр
-d
во многих типах систем означает нечто совершенно иное, чем--date
расширение GNU Date . К сожалению, GNU Date не интерпретирует-r
то же самое, что и другие реализации. К сожалению, вам нужно знать, какую версиюdate
вы используете, а многие старыеdate
команды Unix не поддерживают ни один из этих вариантов.Хуже того, POSIX не
date
распознает и-d
не-r
предоставляет никаких стандартных способов в любой команде (о которой я знаю) для форматирования времени Unix из командной строки (поскольку POSIX Awk также отсутствуетstrftime()
). (Вы не можете использоватьtouch -t
и,ls
потому что первый не принимает время, указанное в секундах, начиная с эпохи Unix.)Обратите внимание, хотя The One True Awk, доступный напрямую от Брайана Кернигана, теперь имеет
strftime()
встроенную функцию, а такжеsystime()
функцию для возврата текущего времени в секундах с эпохи Unix), поэтому, возможно, решение Awk является наиболее переносимым.источник
Если вы найдете нотацию неудобной, возможно,
-R
вам поможет параметр -опция. Дата выводится в формате RFC 2822. Таким образом , вы не нужны все эти идентификаторы:date -d @1278999698 -R
. Другая возможность состоит в том, чтобы вывести дату в секундах в вашем регионе:date -d @1278999698 +%c
. Должно быть легко запомнить. :-)источник
Небольшая поправка к ответу dabest1 выше. Укажите часовой пояс как UTC, а не GMT:
Второй правильный. Я думаю, причина в том, что в Великобритании переход на летнее время действовал постоянно с 1968 по 1971 год.
источник
Стандартное решение Perl:
(или по местному времени, если желательно)
источник
источник
Другие примеры здесь вспомнить сложно. Самое простое:
источник
Поместите в свой ~ / .bashrc следующее:
Пример использования:
источник
Python:
источник