it-swarm-tr.com

Bir Epoch zaman damgasını klipteki insan tarafından okunabilir bir biçime nasıl dönüştürebilirim?

Bir Epoch zaman damgasını klipteki okunabilir bir biçime nasıl dönüştürebilirim? Tarihle yapmanın bir yolu olduğunu düşünüyorum ama sözdizimi beni kaçıyor (diğer yollar hoş geldiniz).

196
xenoterracide

Açık * BSD:

date -r 1234567890

Linux'ta (özellikle, GNU coreutils ≥5.3):

date -d @1234567890

GNU date] 'un eski sürümlerinde, UTC Çağındaki göreceli farkı hesaplayabilirsiniz:

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

Taşınabilirliğe ihtiyacınız varsa, şansınız kalmaz. POSIX Kabuğu komutuyla (hesaplamayı kendiniz yapmadan) satırını biçimlendirebileceğiniz tek zaman geçerli zamandır. Uygulamada, Perl genellikle mevcuttur:

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

date -d @1190000000 1190000000'i Çağınızla değiştirin

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

Bu, günlük dosyalarında Epoch zamanını kullanan uygulamalar için kullanışlı olabilir:

$ 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

GNU date ile özel biçim:

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

Veya GNU awk ile:

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

Bağlantılı SO soru: https://stackoverflow.com/questions/3249827/convert-from-unixtime-at-command-line

12
Ivan Chau

Epoch süreniz saniye yerine milisaniye cinsindeyse, son üç basamağı date -d:

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

Bu yanlış veri verir. Son üç basamağı kaldırın.

$ 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

bash-4.2 Veya üstü ile:

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

(burada %F %Tstrftime()-tipi biçimidir)

Bu sözdiziminden ksh93 Esinlenilmiştir.

ksh93 'Da, argüman çeşitli ve zor belgelenmiş formatların desteklendiği bir tarih ifadesi olarak alınır.

Unix Dönemi süresi için ksh93 Sözdizimi şöyledir:

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

ksh93 Saat dilimi için kendi algoritmasını kullanıyor gibi görünüyor ve yanlış anlayabiliyor. Örneğin, İngiltere'de, 1970'te tüm yıl yaz mevsimiydi, ancak:

$ 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

Sık kullandığım ikisi:

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

ve

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

zsh ile strftime yerleşimini kullanabilirsiniz:

strftime biçimlendirme zamanı
 
 Tarafından belirtilen tarihi çıktılar epochtime içinde biçim belirtildi.

örneğin.

zmodload zsh/datetime
strftime '%A, %d %b %Y' 1234567890
13 Şubat 2009 Cuma

Ayrıca dateconv 'dan dateutils var:

dateconv -i '%s' -f '%A, %d %b %Y' 1234567890
13 Şubat 2009 Cuma

aklınızda bulundurun dateutils araçlar varsayılan olarak UTC (ekle -z your/timezone gerekirse).

7
don_crissti

Tarih saatini Shell tarafından doğrudan ayrıştırılabilecek biçimde yazdırmak için küçük bir C programı da kullanabilirsiniz

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

kullanımı:

#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

Küçük bir node.js olmadan gerçek bir çözüm olmazdı:

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

bunu ~/.bash_aliases ve bunun ~/.bashrc ile . ~/.bash_aliases

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

Sisteminizdeki düğümü almak için http://nvm.sh adresine gidin ve curl komutunu çalıştırın. Düğüm sürümlerini değiştirmenize izin veren düğüm sürüm yöneticisini (nvm) yükler.

Sadece yaz nvm ls-remote ve nvm install <version>.

0
chovy

PowerShell içinde:

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