it-swarm-ko.tech

CLI에서 Epoch 타임 스탬프를 사람이 읽을 수있는 형식으로 변환하려면 어떻게합니까?

CLI에서 Epoch 타임 스탬프를 사람이 읽을 수있는 형식으로 변환하려면 어떻게합니까? 나는 날짜로 그것을 할 수있는 방법이 있다고 생각하지만 구문은 나를 피할 수 있습니다 (다른 방법은 환영합니다).

196
xenoterracide

* BSD에서 :

date -r 1234567890

Linux에서 (특히 GNU coreutils ≥5.3)) :

date -d @1234567890

이전 버전의 GNU 날짜)를 사용하면 UTC Epoch와의 상대적인 차이를 계산할 수 있습니다.

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

이식성이 필요한 경우 운이 좋지 않습니다. POSIX Shell 명령으로 직접 계산할 수있는 유일한 시간은 현재 시간입니다. 실제로 Perl은 종종 다음과 같이 사용 가능합니다.

Perl -le 'print scalar localtime $ARGV[0]' 1234567890

date -d @1190000000 1190000000을 Epoch로 교체하십시오.

28
fschmitt
$ echo 1190000000 | Perl -pe 's/(\d+)/localtime($1)/e' 
Sun Sep 16 20:33:20 2007

이는 로그 파일에서 Epoch 시간을 사용하는 응용 프로그램에 유용 할 수 있습니다.

$ 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
Stefan Lasiewski

GNU date 인 사용자 정의 형식 :

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

또는 GNU awk) :

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

연결됨 SO 질문 : https://stackoverflow.com/questions/3249827/convert-from-unixtime-at-command-line

12
Ivan Chau

Epoch 시간이 초가 아닌 밀리 초인 경우 마지막 3 자리를 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.
12
KnockTurnAl

bash-4.2 이상 :

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

(여기서 %F %Tstrftime()- type 형식입니다)

이 구문은 ksh93에서 영감을 얻었습니다.

그러나 ksh93에서 인수는 다양한 문서 형식이 거의 지원되지 않는 날짜 표현으로 간주됩니다.

Unix Epoch 시간의 경우 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
Stéphane Chazelas

내가 자주 사용하는 두 가지는 다음과 같습니다.

$ 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
al.

zsh를 사용하면 strftime 내장을 사용할 수 있습니다.

strftime 획기적인 형식
 
로 표시된 날짜를 출력하십시오. 획기적인 시간 에서 체재 지정되었습니다.

예 :.

zmodload zsh/datetime
strftime '%A, %d %b %Y' 1234567890
2009 년 2 월 13 일 금요일

dateconvdateutils도 있습니다 :

dateconv -i '%s' -f '%A, %d %b %Y' 1234567890
2009 년 2 월 13 일 금요일

dateutils 도구의 기본값은 UTC입니다 (필요한 경우 -z your/timezone 추가).

7
don_crissti

셸에서 직접 구문 분석 할 수있는 형식으로 날짜 시간을 인쇄하기 위해 작은 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
Meow

작은 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 <version>로 선택하십시오.

0
chovy

PowerShell 에서 :

(([System.DateTimeOffset]::FromUnixTimeMilliSeconds($unixtime)).DateTime).ToString("s")
0
Kulwinder Singh