CLIでエポックタイムスタンプを人間が読める形式に変換するにはどうすればよいですか?


183

CLIでエポックタイムスタンプを人間が読める形式に変換するにはどうすればよいですか?日付でそれを行う方法があると思いますが、構文は私を避けます(他の方法は歓迎します)。

回答:


268

* 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

4
移植性の欠如に関するコメントに対して+1(なぜPOSIX仕様にこれを行う方法が含まれていないのですか?grr)
リチャードハンセン

3
どういう@意味date -d @1234567890ですか?man dateそれへの参照を行っていない...
クリス・マークル

10
@ChrisMarkle GNUのmanページは、しばしば完全に不完全です。「日付文字列の書式を簡単にここに文書化されているよりも複雑であるが、完全に情報のマニュアルに記載されている。」ウィットへ:gnu.org/software/coreutils/manual/html_node/...
ジル

2
これinfo dateでかなり完了です。のエントリで28.9 Seconds since the Epochは、@ timestampについて詳しく説明しています。

Linuxの場合:date + '%s' | xargsの-I nは日付-d @n
イワン鴎外


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

(-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

7

エポック時間が秒ではなくミリ秒単位の場合は、最後の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.

ミリ秒(ドットなし)を含むユーティリティ印刷は何ですか?

WebLogic Application Serverは、スクリプトツールの使用時にほとんどミリ秒でドットなしのデータ時間値を返すことがわかりました。例:lastSuccessfulConnectionUse = 1455086371603
KnockTurnAl

そうですか。このページでは、Raw Time Valueのミリ秒単位のタイムスタンプを確認します。ありがとう。

アトラシアンのツールは、タイムスタンプをミリ秒単位のエポック時間として記録します。
Br.Bill

6

私が頻繁に使用する2つは次のとおりです。

$ 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コマンドを実行します。Node Version Manager(nvm)がインストールされ、ノードのバージョンを切り替えることができます。

を入力nvm ls-remoteして、バージョンを選択しnvm install <version>ます。


0

これを行う簡単な方法があります:(([System.DateTimeOffset] :: FromUnixTimeMilliSeconds($ unixtime))。DateTime).ToString( "s")


U&Lにようこそ!質問のタグを見てください:このコードは、いくつかのUnixまたはUnixライクなシステムのシェルで動作しますか?
fra-san

この手法はMicrosoft .NETを使用しています。OPがMSソリューションを探しているようには見えません。
user2320464
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.