Как я преобразовываю метку времени эпохи в человекочитаемый формат на cli?

И склонный - добираются и способность, полагаются на библиотеку APT, да.

См. мой ответ на serverfault.com.

Debian не является монолитным объектом, существуют люди с различными мнениями, и специалист по обслуживанию способности решил, что склонный - имеются некоторые недостатки и хотел создать что-то лучше со способностью. Он улучшил логику для нахождения решений для сложных сценариев обновления, добавил GUI для консоли и т.д. И существуют больше, чем просто склонный - добираются и способность, видят, что моя склонная статья - добирается, способность, … выбирают правильный диспетчер пакетов для Вас.

190
08.11.2010, 00:03
11 ответов

На *BSD:

date -r 1234567890

На Linux (а именно, с GNU coreutils ≥5.3):

date -d @1234567890

С более старыми версиями даты GNU можно вычислить относительную разницу для эпохи UTC:

date -d '1970-01-01 UTC + 1234567890 seconds'

При необходимости в мобильности Вам не повезло. Единственное время, которое можно отформатировать с командой оболочки POSIX (не делая вычисления сами) строка, является текущим временем. На практике Perl часто доступен:

perl -le 'print scalar localtime $ARGV[0]' 1234567890
280
27.01.2020, 19:28
  • 1
    +1 для комментария об отсутствии мобильности (почему спецификация POSIX не включает способ сделать это? grr), –  Richard Hansen 02.02.2012, 00:50
  • 2
    Что делает @ средний в date -d @1234567890? man date сделанный никакая ссылка на это... –  Chris Markle 14.01.2013, 23:10
  • 3
    @ChrisMarkle GNU являются часто горестно неполными. “Формат строки даты более сложен, чем легко документируется здесь, но полностью описан в информационной документации”. К остроумию: gnu.org/software/coreutils/manual/html_node / … –  Gilles 'SO- stop being evil' 14.01.2013, 23:56
  • 4
    info date довольно завершено. Запись в 28.9 Seconds since the Epoch объясняет подробно о @timestamp. –   10.02.2016, 10:31
  • 5
    В Linux в канале: дата + '%s' | xargs-I n датирует-d @n –  Ivan Ogai 12.08.2016, 16:08

date -d @1190000000 Замените 1190000000 своей эпохой

27
27.01.2020, 19:28
  • 1
    Принятие даты GNU, которая является. –  Gilles 'SO- stop being evil' 11.10.2010, 21:14
$ echo 1190000000 | perl -pe 's/(\d+)/localtime($1)/e' 
Sun Sep 16 20:33:20 2007

Это может пригодиться для тех приложений, которые используют время эпохи в файлах журнала:

$ tail -f /var/log/nagios/nagios.log | perl -pe 's/(\d+)/localtime($1)/e'
[Thu May 13 10:15:46 2010] EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;HOSTA;check_raid;0;check_raid.pl: OK (Unit 0 on Controller 0 is OK)
14
27.01.2020, 19:28

Два, которые я часто использую:

$ perl -leprint\ scalar\ localtime\ 1234567890
Sat Feb 14 00:31:30 2009

и

$ tclsh
% clock format 1234567890
Sa Feb 14 00:31:30 CET 2009
7
27.01.2020, 19:28

Пользовательский формат с GNU date:

date -d @1234567890 +'%Y-%m-%d %H:%M:%S'

Или с GNU awk:

awk 'BEGIN { print strftime("%Y-%m-%d %H:%M:%S", 1234567890); }'

Связанный ТАК вопрос: https://stackoverflow.com/questions/3249827/convert-from-unixtime-at-command-line

12
27.01.2020, 19:28
  • 1
    Только работы для даты GNU и GNU awk. Ни awk, ни nawk не поддерживают strftime. –  DarkHeart 28.07.2014, 06:56

С bash-4.2 или выше:

printf '%(%F %T)T\n' 1234567890

(где % F% T - это формат типа strftime () )

Этот синтаксис основан на ksh93 .

В ksh93 однако аргумент принимается как выражение даты, где поддерживаются различные и трудно задокументированные форматы.

Для эпохи Unix синтаксис в ksh93 выглядит так:

printf '%(%F %T)T\n' '#1234567890'

ksh93 , однако, похоже, использует свой собственный алгоритм для часового пояса и может ошибаться. Например, в Великобритании в 1970 году было лето весь год, но:

$ TZ=Europe/London bash -c 'printf "%(%c)T\n" 0'
Thu 01 Jan 1970 01:00:00 BST
$ TZ=Europe/London ksh93 -c 'printf "%(%c)T\n" "#0"'
Thu Jan  1 00:00:00 1970
11
27.01.2020, 19:28

Настроен ли CentOS 6,6 на использование репозитория, содержащего флэш-плагин , RepoForge , например?

Ошибка dropbox возникает из-за отсутствия http://linux.dropbox.com/fedora/6/repodata/repomd.xml . CentOS отсутствует по адресу http://linux.dropbox.com . Вы можете временно отключить репозиторий с помощью:

yum install flash-plugin --disablerepo=Dropbox

или сделать его постоянным, установив

enabled=0

в /etc/yum.repos.d/Dropbox.repo или вне зависимости от имени файла репо dropbox .

EDIT:

Обратите внимание, что Flash не поддерживается в Linux . Эта ссылка предоставляет дополнительную информацию.

По запросу, вот некоторые информационные ссылки о репозиториях и YUM:

Добавление репозитория

Настройка и использование репозиториев

YUM HowTo

-121--243757-

По умолчанию экран выходит, когда выполняемая команда закрывается, как вы заметили. При запуске экрана сама по себе команда, которую она выполняет, представляет собой интерактивную оболочку, которая, конечно, не выходит, когда это делают ее потомки.

Если вы хотите получить что-то подобное из другого сценария, вы могли бы сделать это

screen -dm -S myscreen
screen -S myscreen -X stuff "export VAR=123; cd /usr/local/myproject^M"
screen -S myscreen -X stuff "./myscript.py && exit^M"

Это сначала запустит новый экран, на котором будет работать оболочка входа, и не будет закрываться, пока оболочка входа не выйдет. Затем для ввода текста в оболочку используется команда screen 's stuff . В первой строке определяются переменные и изменяется каталог. На второй строке начнем сценарий, а затем выйдем из оболочки (при условии, что вы хотите закрыть сеанс экрана в случае успеха сценария). Однако из-за короткого замыкания и ( & & ), если происходит сбой myscript.py , выход никогда не произойдет, и вы сможете повторно подключиться к экранному сеансу и увидеть, что произошло.

Обратите внимание, что для правильного ввода ^ M необходимо ввести ^ V (control-v), а затем ^ M (то же, что и клавиша ввода).

-121--84661-

С помощью zsh можно использовать strftime builtin:

strftime format epochtime

      Output the date denoted by epochtime in the format specified.

например

zmodload zsh/datetime
strftime '%A, %d %b %Y' 1234567890
Friday, 13 Feb 2009

Существует также dateconv из dateutils :

dateconv -i '%s' -f '%A, %d %b %Y' 1234567890
Friday, 13 Feb 2009

имейте в виду dateutils tools по умолчанию UTC (при необходимости добавьте -z your/timezone ).

7
27.01.2020, 19:28

Не было бы настоящего решения без небольшого node.js:

epoch2date(){
    node -p "new Date($1)"
}

добавьте это в ~ / .bash_aliases и сделайте конечно, его источник находится в ~ / .bashrc с . ~ / .bash_aliases

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Чтобы получить узел в вашей системе, перейдите к http://nvm.sh и выполните команду curl. Он установит диспетчер версий узла (nvm), который позволяет вам переключать версии узла.

Просто введите nvm ls-remote и выберите версию для nvm install .

0
27.01.2020, 19:28

Вы также можете использовать небольшую программу C для печати даты и времени в формате, который может быть непосредственно проанализирован с помощью оболочки

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main(int argc, char * argv[]) {

    if (argc==1) { 
        return 1;
    }

    struct tm input_tm;
    char * formatStr  = "YEAR=%Y\nMON=%m\nDAY=%d\nHOUR=%H\nMIN=%M\nSEC=%S";
    size_t formatSize = strlen(formatStr) + 2;
    char * output     = (char *)malloc(sizeof(char)*formatSize);

    strptime(argv[1],"%s",&input_tm);
    strftime(output, formatSize, formatStr, &input_tm);

    printf("%s\n",output);
    free(output);
    return 0;
}

:

#compile
clang -o epoch2datetime main.c

#invoke
eval `./epoch2datetime 1450196411`
echo $YEAR $MON $DAY $HOUR $MIN $SEC
#output
#2015 12 16 00 20 11
0
27.01.2020, 19:28

Если время вашей эпохи указано в миллисекундах, а не в секундах, удалите последние три цифры, прежде чем передавать их в date -d :

$ date -d @1455086371603
Tue Nov  7 02:46:43 PST 48079     #Incorrect

Это дает неверные данные. Удалите последние три цифры.

$ date -d @1455086371
Tue Feb  9 22:39:31 PST 2016      #Correct after removing the last three digits. You may remove and round off the last digit too.
10
27.01.2020, 19:28

В PowerShell:

(([System.DateTimeOffset]::FromUnixTimeMilliSeconds($unixtime)).DateTime).ToString("s")
0
27.01.2020, 19:28

Теги

Похожие вопросы