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


183

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

답변:


268

* 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

4
이동성의 부족에 대한 코멘트 +1 (? 왜 POSIX는 GRR이 할 수있는 방법이 포함 사양하지 않는다)
리차드 한센

3
무슨 @date -d @1234567890인가요? man date그것을 언급하지 않았다 ...
Chris Markle

10
@ChrisMarkle GNU 매뉴얼 페이지는 종종 불완전합니다. "날짜 문자열 형식은 여기에 쉽게 문서화되어있는 것보다 더 복잡하지만 정보 설명서에 자세히 설명되어 있습니다."재치 : gnu.org/software/coreutils/manual/html_node/…
Gilles

2
info date아주 완료됩니다. 의 항목 28.9 Seconds since the Epoch은 @timestamp 에 대해 자세히 설명합니다.

파이프의 Linux에서 : 날짜 + '% s'| xargs -I n 날짜 -d @n
Ivan Ogai

26

date -d @1190000000 1190000000을 신기원으로 교체


8
GNU 날짜를 가정하자.
Gilles

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)


11

bash-4.2이상 :

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

(여기서 %F %T는 IS strftime()형 포맷)

이 구문은에서 영감을 받았습니다 ksh93.

에서 ksh93그러나 인수가 다양하고 거의 기록하지 형식이 지원되는 날짜 표현으로한다.

유닉스 시대의 구문 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

7

에포크 시간이 초가 아닌 밀리 초인 경우 마지막 세 자리를 제거하고 다음으로 전달하십시오 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.

어떤 유틸리티 인쇄에 밀리 초가 포함 되었습니까 (점없이)?

WebLogic Application Server는 스크립팅 도구를 사용할 때 대부분 밀리 초와 점없이 데이터 시간 값을 반환한다는 것을 알았습니다. 예 : lastSuccessfulConnectionUse = 1455086371603
KnockTurnAl

내가 참조. 이 페이지는 원시 시간 값을 확인 합니다. 타임 스탬프 (밀리 초) 입니다. 감사.

Atlassian 도구는 타임 스탬프를 밀리 초와 함께 에포크 시간으로 기록합니다.
Br.Bill

6

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

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

$ tclsh
% clock format 1234567890
Sa Feb 14 00:31:30 CET 2009

6

으로 zsh당신이 사용할 수있는 strftime내장을 :

strftime 형식 epochtime
epochtime 으로 
      표시된 날짜를 지정된 형식으로 출력하십시오 .

예 :

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

또한 dateconv있습니다 dateutils:

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

dateutils도구의 기본값을 염두에 두십시오 UTC( -z your/timezone필요한 경우 추가 ).


0

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

작은 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

이 작업을 수행하는 더 쉬운 방법이 있습니다. (([[System.DateTimeOffset] :: FromUnixTimeMilliSeconds ($ unixtime)). DateTime) .ToString ( "s")


U & L에 오신 것을 환영합니다! 질문의 태그를 살펴보십시오.이 코드는 일부 유닉스 또는 유닉스 계열 시스템의 일부 셸에서 작동합니까?
fra-san

이 기술은 Microsoft .NET을 사용하고 있습니다. OP가 MS 솔루션을 찾고있는 것 같지 않습니다.
user2320464
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.