web-dev-qa-db-ja.com

Bashで日時文字列をエポックに変換する

日時文字列の形式は、2012年6月12日07:21:22です。 UNIXタイムスタンプまたはエポックに変換するにはどうすればよいですか?

67
Edward D.

探しているのはdate --date='06/12/2012 07:21:22' +"%s"です。 --date%sの両方のフォーマット文字列はGNU拡張であるため、これはGNU coreutilsを使用していることを前提としています。 POSIXではこれらのいずれも指定されていないため、POSIX準拠のシステム上でもこのような変換を行う移植可能な方法はありません。

dateの他のバージョンについては、適切なマニュアルページを参照してください。

注:bash --dateおよび-dオプションは、USまたはISO8601形式の日付、つまり、英国、EU、またはその他の形式ではないmm/dd/yyyyまたはyyyy-mm-ddを想定しています。

72

Linuxの場合、このコマンドを実行します

date -d '06/12/2012 07:21:22' +"%s"

Mac OSXの場合、このコマンドを実行します

date -j -u -f "%a %b %d %T %Z %Y" "Tue Sep 28 19:35:15 EDT 2010" "+%s"
39

これらの回答の多くは非常に複雑であり、変数の使用方法も欠落しています。これは、標準のLinuxシステムでより簡単に行う方法です(前述のように、dateコマンドはMacユーザー向けに調整する必要があります)。

サンプルスクリプト:

#!/bin/bash
orig="Apr 28 07:50:01"
Epoch=$(date -d "${orig}" +"%s")
Epoch_to_date=$(date -d @$Epoch +%Y%m%d_%H%M%S)    

echo "RESULTS:"
echo "original = $orig"
echo "Epoch conv = $Epoch"
echo "Epoch to human readable time stamp = $Epoch_to_date"

結果:

RESULTS:
original = Apr 28 07:50:01
Epoch conv = 1524916201 
Epoch to human readable time stamp = 20180428_075001

または関数として:

# -- Converts from human to Epoch or Epoch to human, specifically "Apr 28 07:50:01" human.
#    typeset now=$(date +"%s")
#    typeset now_human_date=$(convert_cron_time "human" "$now")

function convert_cron_time() {
    case "${1,,}" in
        Epoch)
            # human to Epoch (eg. "Apr 28 07:50:01" to 1524916201)
            echo $(date -d "${2}" +"%s")
            ;;
        human)
            # Epoch to human (eg. 1524916201 to "Apr 28 07:50:01")
            echo $(date -d "@${2}" +"%b %d %H:%M:%S")
            ;;
    esac
}
4
Mike Q
get_curr_date () {
    # get unix time
    DATE=$(date +%s)
    echo "DATE_CURR : "$DATE
}

conv_utime_hread () {
    # convert unix time to human readable format
    DATE_HREAD=$(date -d @$DATE +%Y%m%d_%H%M%S)
    echo "DATE_HREAD          : "$DATE_HREAD
}
1
shgurbanov