回答:
* BSDの場合:
date -r 1234567890
Linux(具体的には、GNU coreutils≥5.3):
date -d @1234567890
GNU dateの古いバージョンでは、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 : //stackoverflow.com/questions/3249827/convert-from-unixtime-at-command-line
bash-4.2
以上:
printf '%(%F %T)T\n' 1234567890
(-type形式%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
エポック時間が秒ではなくミリ秒単位の場合は、最後の3桁を削除してからdate -d
次の値に渡します。
$ date -d @1455086371603
Tue Nov 7 02:46:43 PST 48079 #Incorrect
これにより、誤ったデータが提供されます。最後の3桁を削除します。
$ 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コマンドを実行します。Node Version Manager(nvm)がインストールされ、ノードのバージョンを切り替えることができます。
を入力nvm ls-remote
して、バージョンを選択しnvm install <version>
ます。
これを行う簡単な方法があります:(([System.DateTimeOffset] :: FromUnixTimeMilliSeconds($ unixtime))。DateTime).ToString( "s")