it-swarm-id.com

Bagaimana cara mengonversi cap waktu Epoch ke format yang dapat dibaca manusia di cli?

Bagaimana cara mengonversi cap waktu Epoch ke format yang dapat dibaca manusia di cli? Saya pikir ada cara untuk melakukannya dengan tanggal tetapi sintaks menghindari saya (cara lain selamat datang).

196
xenoterracide

Pada * BSD:

date -r 1234567890

Di Linux (khususnya, dengan GNU coreutils ≥5.3):

date -d @1234567890

Dengan versi GNU tanggal) yang lebih lama, Anda dapat menghitung perbedaan relatif ke zaman UTC:

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

Jika Anda membutuhkan portabilitas, Anda kurang beruntung. Satu-satunya waktu Anda dapat memformat dengan perintah POSIX Shell (tanpa melakukan perhitungan sendiri) adalah waktu saat ini. Dalam praktiknya, Perl sering tersedia:

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

date -d @1190000000 Ganti 1190000000 dengan Zaman Anda

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

Ini bisa berguna untuk aplikasi yang menggunakan waktu Epoch di file log:

$ 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

Format khusus dengan GNU date:

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

Atau dengan GNU awk:

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

Tertaut SO pertanyaan: https://stackoverflow.com/questions/3249827/convert-from-unixtime-at-command-line

12
Ivan Chau

Jika waktu Epoch Anda dalam milidetik alih-alih detik, hapus tiga digit terakhir sebelum meneruskannya ke date -d:

$ date -d @1455086371603
Tue Nov  7 02:46:43 PST 48079     #Incorrect

Ini memberikan data yang salah. Hapus tiga digit terakhir.

$ 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

Dengan bash-4.2 Atau di atas:

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

(di mana %F %T adalah format tipe strftime()-)

Sintaks itu terinspirasi dari ksh93.

Namun dalam ksh93, Argumen diambil sebagai ekspresi tanggal di mana berbagai format yang sulit didokumentasikan.

Untuk waktu Unix Epoch, sintaks dalam ksh93 Adalah:

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

ksh93 Namun tampaknya menggunakan algoritma sendiri untuk zona waktu dan bisa salah. Misalnya, di Inggris, itu adalah musim panas sepanjang tahun di tahun 1970, tetapi:

$ 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

Dua yang sering saya gunakan adalah:

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

dan

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

Dengan zsh Anda dapat menggunakan strftime builtin:

strftime memformat zaman
 
 Keluarkan tanggal yang ditunjukkan oleh zaman dalam format ditentukan.

misalnya.

zmodload zsh/datetime
strftime '%A, %d %b %Y' 1234567890
Jumat, 13 Feb 2009

Ada juga dateconv dari dateutils :

dateconv -i '%s' -f '%A, %d %b %Y' 1234567890
Jumat, 13 Feb 2009

perlu diingat dateutils alat standar untuk UTC (tambahkan -z your/timezone jika diperlukan).

7
don_crissti

Anda juga bisa menggunakan program C kecil untuk mencetak datetime dalam format yang dapat langsung diuraikan oleh Shell

#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;
}

pemakaian:

#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

Tidak akan menjadi solusi nyata tanpa simpul.js:

Epoch2date(){
    node -p "new Date($1)"
}

tambahkan itu ke ~/.bash_aliases dan pastikan bersumber di ~/.bashrc dengan . ~/.bash_aliases

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Untuk mendapatkan simpul di sistem Anda goto http://nvm.sh dan jalankan perintah curl. Ini akan menginstal manajer versi simpul (nvm) yang memungkinkan Anda untuk beralih versi simpul.

Ketik saja nvm ls-remote dan pilih versi ke nvm install <version>.

0
chovy

Dalam PowerShell :

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