epoch 타임 스탬프를 CLI에서 사람이 읽을 수있는 형식으로 변환하려면 어떻게합니까? 날짜로 할 수있는 방법이 있다고 생각하지만 구문이 뛰어납니다 (다른 방법은 환영합니다).
epoch 타임 스탬프를 CLI에서 사람이 읽을 수있는 형식으로 변환하려면 어떻게합니까? 날짜로 할 수있는 방법이 있다고 생각하지만 구문이 뛰어납니다 (다른 방법은 환영합니다).
답변:
* 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
@
뜻 date -d @1234567890
인가요? man date
그것을 언급하지 않았다 ...
$ 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)
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 : //.com/questions/3249827/convert-from-unixtime-at-command-line
와 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
에포크 시간이 초가 아닌 밀리 초인 경우 마지막 세 자리를 제거하고 다음으로 전달하십시오 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.
으로 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
필요한 경우 추가 ).
쉘에서 직접 구문 분석 할 수있는 형식으로 날짜 시간을 인쇄하기 위해 작은 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
작은 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>
.
이 작업을 수행하는 더 쉬운 방법이 있습니다. (([[System.DateTimeOffset] :: FromUnixTimeMilliSeconds ($ unixtime)). DateTime) .ToString ( "s")