web-dev-qa-db-ja.com

UNIXで「19-FEB-12」などの文字列をエポック日付に変換する方法

UNIXでは、次のような日付文字列をエポックミリ秒に変換する方法:

19-FEB-12
16-FEB-12
05-AUG-09

これらの日付をサーバーの現在の時刻と比較するために必要です。

24
hellish

エポック以降の日付を秒に変換するには:

date --date="19-FEB-12" +%s

現在のエポック:

date +%s

だから、あなたの日付は過去にあるので:

NOW=`date +%s`
THEN=`date --date="19-FEB-12" +%s`

let DIFF=$NOW-$THEN
echo "The difference is: $DIFF"

BSDのdateコマンドを使用するには、次のものが必要です。

$ date -j -f "%d-%B-%y" 19-FEB-12 +%s

GNU date:との違い:

  1. -jは、dateがクロックを設定しようとするのを防ぎます
  2. 入力形式は-fで明示的に設定する必要があります
  3. 入力日付は、オプションではなく通常の引数です(つまり、-d
  4. 日付に時刻が指定されていない場合は、午前0時ではなく現在の時刻を使用します。
44
Anew

GNU awkを使用する1つの方法を次に示します。走る:

awk -f script.awk file

script.awkの内容:

BEGIN {

    n = systime()

    FS="-"
}

{
    t = mktime(sprintf("%d %d %d %d %d %d", "20" $3, convert($2), $1, 0, 0, 0))    

    printf "%.1f days ago\n", (n - t) / 60 / 60 / 24
}

function convert(m) {

    return(((index("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC", m) - 1) / 3) + 1)
}

結果:

358.6 days ago
361.6 days ago
1286.6 days ago
1
Steve