340

Unix タイムスタンプを日付に変換するシェル コマンドまたはスクリプトが必要です。入力は、最初のパラメーターまたは stdin のいずれかから取得できるため、次の使用パターンが可能です。

ts2date 1267619929

echo 1267619929 | ts2date

どちらのコマンドも「Wed Mar 3 13:38:49 2010」を出力するはずです。

4

17 に答える 17

646

Linux などのGNU Coreutils >= 5.3.0を搭載したシステムでは、以下を使用できます。

date -d @1267619929
于 2010-03-03T12:47:51.077 に答える
203
date -r <number>

Mac OS Xで動作します。

于 2012-10-26T13:49:15.570 に答える
29

このバージョンはchiborg の answerに似ていますが、外部ttycat. を使用しますdateが、同じように簡単に使用できますgawk。シバンを変更して、二重角かっこを単一のものに置き換えることができます。これもsh.

#!/bin/bash
LANG=C
if [[ -z "$1" ]]
then
    if [[ -p /dev/stdin ]]    # input from a pipe
    then
        read -r p
    else
        echo "No timestamp given." >&2
        exit
    fi
else
    p=$1
fi
date -d "@$p" +%c
于 2010-03-03T14:11:33.970 に答える
18

たとえば、GNU date を使用できます。

$ sec=1267619929
$ date -d "UTC 1970-01-01 $sec secs"

また

$ date -ud @1267619929
于 2010-03-03T12:51:33.477 に答える
10

次の単純な awk スクリプトを使用できます。

#!/bin/gawk -f   
{ print strftime("%c", $0); }

使用例:

$ echo '1098181096' | ./a.awk 
Tue 19 Oct 2004 03:18:16 AM PDT
$
于 2010-03-03T12:45:09.453 に答える
3

この回答では、Dennis Williamson の回答をコピーし、わずかに変更して、多くのタイムスタンプの列をスクリプトにパイプするときに大幅な速度向上を可能にします。たとえば、私のマシンで xargs -n1 を使用して 1000 のタイムスタンプを元のスクリプトにパイプすると、6.929 秒かかりましたが、この変更されたバージョンでは 0.027 秒かかりました。

#!/bin/bash
LANG=C
if [[ -z "$1" ]]
then
    if [[ -p /dev/stdin ]]    # input from a pipe
    then
        cat - | gawk '{ print strftime("%c", $1); }'
    else
        echo "No timestamp given." >&2
        exit
    fi
else
    date -d @$1 +%c
fi
于 2014-09-25T23:08:14.307 に答える
3

私はこれを自分で行うスクリプトを書きました:

#!/bin/bash
LANG=C
if [ -z "$1" ]; then
    if [  "$(tty)" = "not a tty" ]; then
            p=`cat`;
    else
            echo "No timestamp given."
            exit
    fi
else
    p=$1
fi
echo $p | gawk '{ print strftime("%c", $0); }'
于 2010-03-03T12:42:50.713 に答える
-9

PHPで

$unix_time = 1256571985;

echo date("Y-m-d H:i:s",$unix_time)
于 2010-03-03T12:43:35.940 に答える