it-swarm-eu.dev

Jak lze převést časové razítko Epoch do formátu čitelného pro člověka na klientském počítači?

Jak lze převést časové razítko Epoch do formátu čitelného pro člověka na klientském počítači? Myslím, že existuje způsob, jak to udělat s datem, ale syntax mi uniká (jiné způsoby jsou vítány).

196
xenoterracide

On * BSD:

date -r 1234567890

V systému Linux (konkrétně s GNU coreutils ≥5.3):

date -d @1234567890

U starších verzí GNU date) můžete vypočítat relativní rozdíl k epochě UTC:

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

Pokud potřebujete přenositelnost, máte štěstí. Pouze čas, který můžete formátovat pomocí příkazu POSIX Shell (aniž byste provedli výpočet sami), je aktuální čas. V praxi je Perl často k dispozici:

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

date -d @1190000000 Nahraďte 1190000000 svou epochou

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

To se může hodit pro aplikace, které využívají epochy v logfiles:

$ 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

Vlastní formát s GNU date:

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

Nebo s GNU awk:

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

Propojené SO otázka: https://stackoverflow.com/questions/3249827/convert-from-unixtime-at-command-line

12
Ivan Chau

Pokud je váš čas epochy v milisekundách namísto sekund, odstraňte poslední tři číslice a předejte jej date -d:

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

To poskytuje nesprávná data. Odstraňte poslední tři číslice.

$ 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

S bash-4.2 Nebo vyšším:

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

(kde %F %T je formát typu strftime()-)

Tato syntaxe je inspirována ksh93.

V ksh93 Je však argument považován za výraz data, kde jsou podporovány různé a těžko zdokumentované formáty.

Pro dobu Unixové epochy je syntaxe v ksh93:

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

Zdá se však, že ksh93 Používá svůj vlastní algoritmus pro časové pásmo a může to udělat špatně. Například v Británii bylo letní období po celý rok v roce 1970, ale:

$ 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

Často používám dva:

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

a

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

S zsh můžete použít strftime vestavěný:

strftime formát epocha
 
 Výstup data označeného epocha v formát specifikováno.

např.

zmodload zsh/datetime
strftime '%A, %d %b %Y' 1234567890
Pátek 13. února 2009

K dispozici je také dateconv od dateutils :

dateconv -i '%s' -f '%A, %d %b %Y' 1234567890
Pátek 13. února 2009

mějte na paměti dateutils výchozí nástroje UTC (add -z your/timezone V případě potřeby).

7
don_crissti

Můžete také použít malý program C pro tisk datetime ve formátu, který může Shell přímo analyzovat

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

používání:

#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

Bez malého uzlu.js by to nebylo skutečné řešení:

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

přidat to do ~/.bash_aliases a ujistěte se, že jeho zdroj je v ~/.bashrc s . ~/.bash_aliases

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

Chcete-li získat uzel na vašem systému goto http://nvm.sh a spusťte příkaz curl. Nainstaluje správce verzí uzlů (nvm), který vám umožní přepínat verze uzlu.

Stačí zadat nvm ls-remote a vyberte verzi pro nvm install <version>.

0
chovy

V PowerShell :

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