タイムゾーンをどうやって知ることができますか?

タイムゾーンをどうやって知ることができますか?

タイムスタンプ(素人の観点から)は、ロケール文字列が追加されたISO8601文字列(通常はPOSIX指定形式の出力%FT%T)です%Z%z

これにより、タイムスタンプ文字列は特定の「視点」になります。つまり、未定義の現地時間はありません(少なくとも24の異なる固有値を含む)。

これらの「特定時点」文字列は、+'%s'情報を失うことなくエポック値(形式の結果)に変換できます。

たとえば、入力は列1と2にあり、出力は列3と4にあります。

$ cat indate
2020-03-02T12:23:34 UTC         1583151814  2020-03-02T06:23:34CST-0600
2020-03-02T12:23:34 Z           1583151814  2020-03-02T06:23:34CST-0600
2020-03-02T12:23:34 EST         1583169814  2020-03-02T11:23:34CST-0600
2020-03-02T12:23:34 CST         1583173414  2020-03-02T12:23:34CST-0600
2020-03-02T12:23:34 AST         1583166214  2020-03-02T10:23:34CST-0600
2020-03-02T12:23:34 ADT         1583162614  2020-03-02T09:23:34CST-0600
2020-03-02T12:23:34 EDT         1583166214  2020-03-02T10:23:34CST-0600
2020-03-02T12:23:34 BST         1583148214  2020-03-02T05:23:34CST-0600
2020-03-02T12:23:34 IST         1583132014  2020-03-02T00:53:34CST-0600
2020-03-02T12:23:34 +00:00      1583151814  2020-03-02T06:23:34CST-0600
2020-03-02T12:23:34 -0400       1583166214  2020-03-02T10:23:34CST-0600
2020-03-02T12:23:34 -0800       1583180614  2020-03-02T14:23:34CST-0600
2020-03-02T12:23:34 +06:00      1583130214  2020-03-02T00:23:34CST-0600

要求の出力は、タイムゾーンおよび(可能であれば)%Z%z値で上書きされたタイムスタンプを考慮して、エポック以降の秒数でなければなりません。

私たち全員が知っているように、GNU dateは列1と2でこれらすべてを独自に処理できます。

$ date -f indate +%s

問題はawkの解決策ですか?

私がそれを得ることができる唯一の方法はAWKからこれは多くの再フォーマットを伴うGNU Dateを使用して行われ、新しい行ごとに外部実行可能ファイルを呼び出し、それをawkとして返します。私はdateを一度だけ呼び出す方法があると思いますが、それはまだ外部実行可能ファイルです。

もっと良い方法がありますか?awkを使う

私が書いたawkスクリプトは次のとおりです。

$ cat tst.awk
#!/bin/bash
awk 'BEGIN{FS="[ \t:T-]*"}
     {

        cmd="date -d '\''"$1 $2"'\'' +'\''%s'\''";
        while ( ( cmd | getline fmtDate) > 0 ) {
            val = fmtDate
        }
        close(cmd);

        datestr=$1" "$2" "$3" "$4" "$5" "$6" 0 "
        print mktime(datestr),$1,$2,"\t",cmd,"\t",val

    }'  indate

そして出力は正しいようです(現地のEST時間に基づいて)。

$ ./tst.awk
1607012614 2020-12-03T12:23:34 UTC  date -d '2020-12-03T12:23:34 UTC' +'%s' 1606998214
1607012614 2020-12-03T12:23:34 Z    date -d '2020-12-03T12:23:34 Z' +'%s'   1606998214
1607012614 2020-12-03T12:23:34 EST  date -d '2020-12-03T12:23:34 EST' +'%s' 1607016214
1607012614 2020-12-03T12:23:34 EDT  date -d '2020-12-03T12:23:34 EDT' +'%s' 1607012614
1607012614 2020-12-03T12:23:34 BST  date -d '2020-12-03T12:23:34 BST' +'%s' 1606994614
1607012614 2020-12-03T12:23:34 IST  date -d '2020-12-03T12:23:34 IST' +'%s' 1606978414
1607012614 2020-12-03T12:23:34 +00:00   date -d '2020-12-03T12:23:34 +00:00' +'%s'  1606998214
1607012614 2020-12-03T12:23:34 -0400    date -d '2020-12-03T12:23:34 -0400' +'%s'   1607012614
1607012614 2020-12-03T12:23:34 -0800    date -d '2020-12-03T12:23:34 -0800' +'%s'   1607027014
1607012614 2020-12-03T12:23:34 +06:00   date -d '2020-12-03T12:23:34 +06:00' +'%s'  1606976614

ベストアンサー1

以下は、ユーザーエクスペリエンスのタイムゾーンを理解していますが、データから直接理解できないGNU awkのさまざまな拡張についてすべてです。

正確に望む出力ではありません。 (すべてのTZ値、特にEDT、BST、ISTが移植可能か、awkのようにTZ形式で追加の処理が必要かわかりません。追加の調査が必要です。)影響を受けていることがわかります。

$ gawk '{
    dt = gensub(/\s+\S+$/,"",1); gsub(/[-:T]/," ",dt)
    tz = $NF
    if ( match(tz,/^([-+]?)([0-9]{2}):?([0-9]{2})$/,a) ) {
        tz = (a[1] == "-" ? "+" : "-") a[2] ":" a[3]
    }
    ENVIRON["TZ"] = tz

    epochSecs = mktime(dt)

    ENVIRON["TZ"] = "UTC"
    printf "%-30s ->  %10s  ->  %s UTC\n", $0, epochSecs, strftime("%F %T",epochSecs)
}' indate
2020-12-03T12:23:34 UTC        ->  1606998214  ->  2020-12-03 12:23:34 UTC
2020-12-03T12:23:34 Z          ->  1606998214  ->  2020-12-03 12:23:34 UTC
2020-12-03T12:23:34 EST        ->  1607016214  ->  2020-12-03 17:23:34 UTC
2020-12-03T12:23:34 EDT        ->  1606998214  ->  2020-12-03 12:23:34 UTC
2020-12-03T12:23:34 BST        ->  1606998214  ->  2020-12-03 12:23:34 UTC
2020-12-03T12:23:34 IST        ->  1606998214  ->  2020-12-03 12:23:34 UTC
2020-12-03T12:23:34 +00:00     ->  1606998214  ->  2020-12-03 12:23:34 UTC
2020-12-03T12:23:34 -0400      ->  1607012614  ->  2020-12-03 16:23:34 UTC
2020-12-03T12:23:34 -0800      ->  1607027014  ->  2020-12-03 20:23:34 UTC
2020-12-03T12:23:34 +06:00     ->  1606976614  ->  2020-12-03 06:23:34 UTC

上記は、環境変数の値を使用し、GNUが必要なスクリプトで実行されているawkスクリプトの環境で値を変更できることに依存しますmktime()(タイムスタンプを簡単に比較するために派生したエポック秒からUTC時間を出力することです) )。 awkバージョン4.2以降の内部。strftime()TZTZ

たとえば、入力の末尾に数字がある日付の場合、2020-12-03T12:23:34 +06:00日付は+06:00タイムゾーンではなく、UTCで提供されたタイムスタンプに適用される人が読み取ることができる増分として使用されます。date -d '2020-12-03T12:23:34 +06:00' +'%s'(whichoutputs 1606976614.whichは2020-12-03T12:23:34 UTC-6時間)とTZ='+06:00' date -d '2020-12-03T12:23:34' +'%s'(whichoutputs 1607019814.whichは2020-12-03T12:23:34 UTC+ 6時間)を使用すると、違いを確認できます。

したがって、上記のシンボルを実際のタイムゾーンで処理するのではなく、UTCで処理し、タイムスタンプに適用された増分で処理するのと同じ方法で処理するように変更tzする必要があります。date

興味深いことに、タイムdateゾーンがタイムスタンプ文字列の一部として提供されておらず、TZに設定されている場合、EDT、BST、およびISTタイムゾーンの処理に関してgawkと同じように動作しますが、a:の値がないと当然失敗します。 TZに設定されている場合は中央にあります。

$ while read -r ts tz; do
    printf '%s:\t %s  vs  %s\n' "$tz" "$(date +'%s' -d"$ts $tz")" $(TZ="$tz" date '+%s' -d"$ts")
done < indate
UTC:     1606998214  vs  1606998214
Z:   1606998214  vs  1606998214
EST:     1607016214  vs  1607016214
EDT:     1607012614  vs  1606998214
BST:     1606994614  vs  1606998214
IST:     1606978414  vs  1606998214
+00:00:  1606998214  vs  1606998214
-0400:   1607012614  vs  1606998214
-0800:   1607027014  vs  1606998214
+06:00:  1606976614  vs  1607019814

date -dしたがって、タイムゾーンを読む以外に、いくつかの魔法が関係しているようです。マニュアルページasmostly free format human readable date stringなどの文字列を含めることができますnext Thursday

もちろん、データに使用されている移植不可能なTZ値を移植可能な値にマッピングするために、このようなawkスクリプトを作成することもできます(参照)https://vdc-repo.vmware.com/vmwb-repository/dcr-public/790263bc-bd30-48f1-af12-ed36055d718b/e5f17bfc-ecba-40bf-a04f-376bbb118そしてhttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones):

$ gawk 'BEGIN {
    tzmap["EST"] = "US/Eastern"
    tzmap["EDT"] = "-04:00"
    tzmap["BST"] = "+01:00"
    tzmap["IST"] = "Asia/Calcutta"
}
{
    dt = gensub(/\s+\S+$/,"",1); gsub(/[-:T]/," ",dt)
    tz = ( $NF in tzmap ? tzmap[$NF] : $NF )
    if ( match(tz,/^([-+]?)([0-9]{2}):?([0-9]{2})$/,a) ) {
        tz = (a[1] == "-" ? "+" : "-") a[2] ":" a[3]
    }
    ENVIRON["TZ"] = tz

    epochSecs = mktime(dt)

    ENVIRON["TZ"] = "UTC"
    printf "%-30s ->  %10s  ->  %s UTC\n", $0, epochSecs, strftime("%F %T",epochSecs)
}' indate
2020-12-03T12:23:34 UTC        ->  1606998214  ->  2020-12-03 12:23:34 UTC
2020-12-03T12:23:34 Z          ->  1606998214  ->  2020-12-03 12:23:34 UTC
2020-12-03T12:23:34 EST        ->  1607016214  ->  2020-12-03 17:23:34 UTC
2020-12-03T12:23:34 EDT        ->  1607012614  ->  2020-12-03 16:23:34 UTC
2020-12-03T12:23:34 BST        ->  1606994614  ->  2020-12-03 11:23:34 UTC
2020-12-03T12:23:34 IST        ->  1606978414  ->  2020-12-03 06:53:34 UTC
2020-12-03T12:23:34 +00:00     ->  1606998214  ->  2020-12-03 12:23:34 UTC
2020-12-03T12:23:34 -0400      ->  1607012614  ->  2020-12-03 16:23:34 UTC
2020-12-03T12:23:34 -0800      ->  1607027014  ->  2020-12-03 20:23:34 UTC
2020-12-03T12:23:34 +06:00     ->  1606976614  ->  2020-12-03 06:23:34 UTC

入力ファイルにどのTZが表示されるかを事前に知っておく必要があります。これはあなたに当てはまるようです。

注:上記のコマンドはMacで実行されます。 cygwinで同じコマンドを実行すると、TZ値がわかりません。私はこれが他の種類の移植性の問題ではなく、cygwinの問題だと思います。dateawk

みんなと話し合った最後にタイムゾーンデータベースPaul Eggertが寄稿し、bashツールとPOSIXツールを使用して、タイムゾーンの略語からオフセット名とデータベース名までのマッピングファイルを生成するシェルスクリプトを作成しました(タイムゾーンデータベースディレクトリ構造と正しいツールバージョンがある場合)zdump

$ cat maptzabbrs
#!/usr/bin/env bash

usage() {
    cat <<'!'
Usage:  maptzabbrs [overrides]
        maptzabbrs --help

Given a timezone database directory like /usr/share/zoneinfo/posix and
a version of zdump (https://man7.org/linux/man-pages/man8/zdump.8.html)
that supports "-i", this will output a tab-separated table of
Abbreviation -> Offset -> Database Names where the list of Database Names
associated with each Abbreviation+Offset will be comma-separated.
Database names without an alphanumeric abbreviation are ignored.

Input: "zdump -i" outputs blank line separated records like:

        TZ="/usr/share/zoneinfo/posix/America/Chicago"
        -       -       -06     CST
        2022-03-13      03      -05     CDT     1
        2022-11-06      01      -06     CST

        TZ="/usr/share/zoneinfo/posix/Asia/Hong_Kong"
        -       -       +08     HKT

Stdout Output (all alphanumeric abbreviations):

        CDT     -04:00  America/Havana,Cuba
        CDT     -05:00  America/Bahia_Banderas,America/Chicago,...
        CST     +08:00  Asia/Chongqing,Asia/Chungking,...
        CST     -05:00  America/Havana,Cuba
        CST     -06:00  America/Bahia_Banderas,...,America/Chicago,...
        HKT     +08:00  Asia/Hong_Kong,Hongkong

Stderr Output (only abbreviations with multiple offsets):

        Warning: abbreviation(s) with multiple alternative offsets:
        CDT     -04:00  America/Havana,Cuba
        CDT     -05:00  America/Bahia_Banderas,America/Chicago,...
        CST     +08:00  Asia/Chongqing,Asia/Chungking,...
        CST     -05:00  America/Havana,Cuba
        CST     -06:00  America/Bahia_Banderas,...,America/Chicago,...

If this tool is called with an argument, that is taken as file of overrides
to disambiguate abbreviations such as the above that would otherwise have
multiple offsets, e.g. if the file "overrides" contained (third column
optional and ignored):

        CDT     -05:00  America/Bahia_Banderas,America/Chicago,...
        CST     -06:00  America/Bahia_Banderas,...,America/Chicago,...

Then calling the tool as

        maptzabbrs overrides

would restrict the stdout for CST and CDT to only be for the stated
offsets and they would not be reported as ambiguous on stderr.

References:
        https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
        https://en.wikipedia.org/wiki/Tz_database

Thanks to the TZ dabatase provider Paul Eggert for background
information and suggestions on how to make this work.
!
}

if [[ "$1" == "--help" ]]; then
    usage
    exit
fi

: tzDir=${tzDir:='/usr/share/zoneinfo/posix'}
(( $# > 0 )) && overrides=$1 || overrides='/dev/null'

ofs='\t'
printf "Zone${ofs}Offset${ofs}Names\n"

find "$tzDir" -type f | sort | xargs zdump -c 2022,2023 -i |
awk -v tzDir="$tzDir" -v OFS="$ofs" '
    FILENAME == ARGV[1] {
        abbr2offset[$1] = $2
        next
    }
    NF {
        if ( sub(/^TZ="/,"") ) {
            sub(/".*/,"")
            name = substr($0,length(tzDir)+2)
        }
        else {
            # change [[:alpha:]] to [[a-zA-Z]] if not supported
            abbr = ($4 ~ /[[:alpha:]]/ ? $4 : "")
            offset = sprintf("%s:%02d",substr($3,1,3),substr($3,4))

            if ( abbr != "" ) {
                abbrs[abbr]
                if ( !(abbr in abbr2offset) ||
                     ((abbr in abbr2offset) && (abbr2offset[abbr] == offset)) ) {
                    if ( !seen_offset[abbr,offset]++ ) {
                        abbrsOffsets[abbr,++numOffsets[abbr]] = offset
                    }
                    if ( !seen_name[abbr,offset,name]++ ) {
                        abbrsNames[abbr,offset,++numNames[abbr,offset]] = name
                    }
                }
            }
        }
    }
    END {
        for ( abbr in abbrs ) {
            for ( offsetNr=1; offsetNr<=numOffsets[abbr]; offsetNr++ ) {
                offset = abbrsOffsets[abbr,offsetNr]
                for ( nameNr=1; nameNr<=numNames[abbr,offset]; nameNr++ ) {
                    name = abbrsNames[abbr,offset,nameNr]
                    names = (nameNr>1 ? names "," : "") name
                }
                print abbr, offset, names | "sort"

                if ( numOffsets[abbr] > 1 ) {
                    gotAmbiguous = 1
                    ambiguous[abbr OFS offset] = names
                }
            }
        }
        close("sort")

        if ( gotAmbiguous ) {
            print "Warning: abbreviation(s) with multiple alternative offsets:" | "cat>&2"
            close("cat>&2")
            for ( abbrOffset in ambiguous ) {
                print abbrOffset, ambiguous[abbrOffset] | "sort>&2"
            }
            close("sort>&2")
        }
    }
' "$overrides" -

このオーバーレイファイルが与えられると、上記のコードを実行するのに約0.5秒かかります。

$ cat overrides
CDT     -05:00  America/Bahia_Banderas,America/Chicago,America/Indiana/Knox,America/Indiana/Tell_City,America/Knox_IN,America/Matamoros,America/Menominee,America/Merida,America/Mexico_City,America/Monterrey,America/North_Dakota/Beulah,America/North_Dakota/Center,America/North_Dakota/New_Salem,America/Rainy_River,America/Rankin_Inlet,America/Resolute,America/Winnipeg,CST6CDT,Canada/Central,Mexico/General,US/Central,US/Indiana-Starke
CST     -06:00  America/Bahia_Banderas,America/Belize,America/Chicago,America/Costa_Rica,America/El_Salvador,America/Guatemala,America/Indiana/Knox,America/Indiana/Tell_City,America/Knox_IN,America/Managua,America/Matamoros,America/Menominee,America/Merida,America/Mexico_City,America/Monterrey,America/North_Dakota/Beulah,America/North_Dakota/Center,America/North_Dakota/New_Salem,America/Rainy_River,America/Rankin_Inlet,America/Regina,America/Resolute,America/Swift_Current,America/Tegucigalpa,America/Winnipeg,CST6CDT,Canada/Central,Canada/Saskatchewan,Mexico/General,US/Central,US/Indiana-Starke
IST     +05:30  Asia/Calcutta,Asia/Kolkata
PST     -08:00  America/Ensenada,America/Los_Angeles,America/Santa_Isabel,America/Tijuana,America/Vancouver,Canada/Pacific,Mexico/BajaNorte,PST8PDT,US/Pacific

マイコンピュータでは、次の出力が生成されます。

$ /maptzabbrs overrides
Zone    Offset  Names
ACDT    +10:30  Australia/Adelaide,Australia/Broken_Hill,Australia/South,Australia/Yancowinna
ACST    +09:30  Australia/Adelaide,Australia/Broken_Hill,Australia/Darwin,Australia/North,Australia/South,Australia/Yancowinna
ADT     -03:00  America/Glace_Bay,America/Goose_Bay,America/Halifax,America/Moncton,America/Thule,Atlantic/Bermuda,Canada/Atlantic
AEDT    +11:00  Antarctica/Macquarie,Australia/ACT,Australia/Canberra,Australia/Currie,Australia/Hobart,Australia/Melbourne,Australia/NSW,Australia/Sydney,Australia/Tasmania,Australia/Victoria
AEST    +10:00  Antarctica/Macquarie,Australia/ACT,Australia/Brisbane,Australia/Canberra,Australia/Currie,Australia/Hobart,Australia/Lindeman,Australia/Melbourne,Australia/NSW,Australia/Queensland,Australia/Sydney,Australia/Tasmania,Australia/Victoria
AKDT    -08:00  America/Anchorage,America/Juneau,America/Metlakatla,America/Nome,America/Sitka,America/Yakutat,US/Alaska
AKST    -09:00  America/Anchorage,America/Juneau,America/Metlakatla,America/Nome,America/Sitka,America/Yakutat,US/Alaska
AST     -04:00  America/Anguilla,America/Antigua,America/Aruba,America/Barbados,America/Blanc-Sablon,America/Curacao,America/Dominica,America/Glace_Bay,America/Goose_Bay,America/Grenada,America/Guadeloupe,America/Halifax,America/Kralendijk,America/Lower_Princes,America/Marigot,America/Martinique,America/Moncton,America/Montserrat,America/Port_of_Spain,America/Puerto_Rico,America/Santo_Domingo,America/St_Barthelemy,America/St_Kitts,America/St_Lucia,America/St_Thomas,America/St_Vincent,America/Thule,America/Tortola,America/Virgin,Atlantic/Bermuda,Canada/Atlantic
AWST    +08:00  Australia/Perth,Australia/West
BST     +01:00  Europe/Belfast,Europe/Guernsey,Europe/Isle_of_Man,Europe/Jersey,Europe/London,GB,GB-Eire
CAT     +02:00  Africa/Blantyre,Africa/Bujumbura,Africa/Gaborone,Africa/Harare,Africa/Juba,Africa/Khartoum,Africa/Kigali,Africa/Lubumbashi,Africa/Lusaka,Africa/Maputo,Africa/Windhoek
CDT     -05:00  America/Bahia_Banderas,America/Chicago,America/Indiana/Knox,America/Indiana/Tell_City,America/Knox_IN,America/Matamoros,America/Menominee,America/Merida,America/Mexico_City,America/Monterrey,America/North_Dakota/Beulah,America/North_Dakota/Center,America/North_Dakota/New_Salem,America/Rainy_River,America/Rankin_Inlet,America/Resolute,America/Winnipeg,CST6CDT,Canada/Central,Mexico/General,US/Central,US/Indiana-Starke
CEST    +02:00  Africa/Ceuta,Arctic/Longyearbyen,CET,Europe/Amsterdam,Europe/Andorra,Europe/Belgrade,Europe/Berlin,Europe/Bratislava,Europe/Brussels,Europe/Budapest,Europe/Busingen,Europe/Copenhagen,Europe/Gibraltar,Europe/Ljubljana,Europe/Luxembourg,Europe/Madrid,Europe/Malta,Europe/Monaco,Europe/Oslo,Europe/Paris,Europe/Podgorica,Europe/Prague,Europe/Rome,Europe/San_Marino,Europe/Sarajevo,Europe/Skopje,Europe/Stockholm,Europe/Tirane,Europe/Vaduz,Europe/Vatican,Europe/Vienna,Europe/Warsaw,Europe/Zagreb,Europe/Zurich,Poland
CET     +01:00  Africa/Algiers,Africa/Ceuta,Africa/Tunis,Arctic/Longyearbyen,CET,Europe/Amsterdam,Europe/Andorra,Europe/Belgrade,Europe/Berlin,Europe/Bratislava,Europe/Brussels,Europe/Budapest,Europe/Busingen,Europe/Copenhagen,Europe/Gibraltar,Europe/Ljubljana,Europe/Luxembourg,Europe/Madrid,Europe/Malta,Europe/Monaco,Europe/Oslo,Europe/Paris,Europe/Podgorica,Europe/Prague,Europe/Rome,Europe/San_Marino,Europe/Sarajevo,Europe/Skopje,Europe/Stockholm,Europe/Tirane,Europe/Vaduz,Europe/Vatican,Europe/Vienna,Europe/Warsaw,Europe/Zagreb,Europe/Zurich,Poland
CST     -06:00  America/Bahia_Banderas,America/Belize,America/Chicago,America/Costa_Rica,America/El_Salvador,America/Guatemala,America/Indiana/Knox,America/Indiana/Tell_City,America/Knox_IN,America/Managua,America/Matamoros,America/Menominee,America/Merida,America/Mexico_City,America/Monterrey,America/North_Dakota/Beulah,America/North_Dakota/Center,America/North_Dakota/New_Salem,America/Rainy_River,America/Rankin_Inlet,America/Regina,America/Resolute,America/Swift_Current,America/Tegucigalpa,America/Winnipeg,CST6CDT,Canada/Central,Canada/Saskatchewan,Mexico/General,US/Central,US/Indiana-Starke
ChST    +10:00  Pacific/Guam,Pacific/Saipan
EAT     +03:00  Africa/Addis_Ababa,Africa/Asmara,Africa/Asmera,Africa/Dar_es_Salaam,Africa/Djibouti,Africa/Kampala,Africa/Mogadishu,Africa/Nairobi,Indian/Antananarivo,Indian/Comoro,Indian/Mayotte
EDT     -04:00  America/Detroit,America/Fort_Wayne,America/Grand_Turk,America/Indiana/Indianapolis,America/Indiana/Marengo,America/Indiana/Petersburg,America/Indiana/Vevay,America/Indiana/Vincennes,America/Indiana/Winamac,America/Indianapolis,America/Iqaluit,America/Kentucky/Louisville,America/Kentucky/Monticello,America/Louisville,America/Montreal,America/Nassau,America/New_York,America/Nipigon,America/Pangnirtung,America/Port-au-Prince,America/Thunder_Bay,America/Toronto,Canada/Eastern,EST5EDT,US/East-Indiana,US/Eastern,US/Michigan
EEST    +03:00  Asia/Amman,Asia/Beirut,Asia/Damascus,Asia/Famagusta,Asia/Gaza,Asia/Hebron,Asia/Nicosia,EET,Europe/Athens,Europe/Bucharest,Europe/Chisinau,Europe/Helsinki,Europe/Kiev,Europe/Mariehamn,Europe/Nicosia,Europe/Riga,Europe/Sofia,Europe/Tallinn,Europe/Uzhgorod,Europe/Vilnius,Europe/Zaporozhye
EET     +02:00  Africa/Cairo,Africa/Tripoli,Asia/Amman,Asia/Beirut,Asia/Damascus,Asia/Famagusta,Asia/Gaza,Asia/Hebron,Asia/Nicosia,EET,Egypt,Europe/Athens,Europe/Bucharest,Europe/Chisinau,Europe/Helsinki,Europe/Kaliningrad,Europe/Kiev,Europe/Mariehamn,Europe/Nicosia,Europe/Riga,Europe/Sofia,Europe/Tallinn,Europe/Uzhgorod,Europe/Vilnius,Europe/Zaporozhye,Libya
EST     -05:00  America/Atikokan,America/Cancun,America/Cayman,America/Coral_Harbour,America/Detroit,America/Fort_Wayne,America/Grand_Turk,America/Indiana/Indianapolis,America/Indiana/Marengo,America/Indiana/Petersburg,America/Indiana/Vevay,America/Indiana/Vincennes,America/Indiana/Winamac,America/Indianapolis,America/Iqaluit,America/Jamaica,America/Kentucky/Louisville,America/Kentucky/Monticello,America/Louisville,America/Montreal,America/Nassau,America/New_York,America/Nipigon,America/Panama,America/Pangnirtung,America/Port-au-Prince,America/Thunder_Bay,America/Toronto,Canada/Eastern,EST,EST5EDT,Jamaica,US/East-Indiana,US/Eastern,US/Michigan
GMT     +00:00  Africa/Abidjan,Africa/Accra,Africa/Bamako,Africa/Banjul,Africa/Bissau,Africa/Conakry,Africa/Dakar,Africa/Lome,Africa/Monrovia,Africa/Nouakchott,Africa/Ouagadougou,Africa/Sao_Tome,Africa/Timbuktu,America/Danmarkshavn,Atlantic/Reykjavik,Atlantic/St_Helena,Eire,Etc/GMT,Etc/GMT+0,Etc/GMT-0,Etc/GMT0,Etc/Greenwich,Europe/Belfast,Europe/Dublin,Europe/Guernsey,Europe/Isle_of_Man,Europe/Jersey,Europe/London,GB,GB-Eire,GMT,GMT+0,GMT-0,GMT0,Greenwich,Iceland
HDT     -09:00  America/Adak,America/Atka,US/Aleutian
HKT     +08:00  Asia/Hong_Kong,Hongkong
HST     -10:00  America/Adak,America/Atka,HST,Pacific/Honolulu,Pacific/Johnston,US/Aleutian,US/Hawaii
IDT     +03:00  Asia/Jerusalem,Asia/Tel_Aviv,Israel
IST     +05:30  Asia/Calcutta,Asia/Kolkata
JST     +09:00  Asia/Tokyo,Japan
KST     +09:00  Asia/Pyongyang,Asia/Seoul,ROK
MDT     -06:00  America/Boise,America/Cambridge_Bay,America/Chihuahua,America/Denver,America/Edmonton,America/Inuvik,America/Mazatlan,America/Ojinaga,America/Shiprock,America/Yellowknife,Canada/Mountain,MST7MDT,Mexico/BajaSur,Navajo,US/Mountain
MEST    +02:00  MET
MET     +01:00  MET
MSK     +03:00  Europe/Moscow,Europe/Simferopol,Europe/Tiraspol,W-SU
MST     -07:00  America/Boise,America/Cambridge_Bay,America/Chihuahua,America/Creston,America/Dawson,America/Dawson_Creek,America/Denver,America/Edmonton,America/Fort_Nelson,America/Hermosillo,America/Inuvik,America/Mazatlan,America/Ojinaga,America/Phoenix,America/Shiprock,America/Whitehorse,America/Yellowknife,Canada/Mountain,Canada/Yukon,MST,MST7MDT,Mexico/BajaSur,Navajo,US/Arizona,US/Mountain
NDT     -02:30  America/St_Johns,Canada/Newfoundland
NST     -03:30  America/St_Johns,Canada/Newfoundland
NZDT    +13:00  Antarctica/McMurdo,Antarctica/South_Pole,NZ,Pacific/Auckland
NZST    +12:00  Antarctica/McMurdo,Antarctica/South_Pole,NZ,Pacific/Auckland
PDT     -07:00  America/Ensenada,America/Los_Angeles,America/Santa_Isabel,America/Tijuana,America/Vancouver,Canada/Pacific,Mexico/BajaNorte,PST8PDT,US/Pacific
PKT     +05:00  Asia/Karachi
PST     -08:00  America/Ensenada,America/Los_Angeles,America/Santa_Isabel,America/Tijuana,America/Vancouver,Canada/Pacific,Mexico/BajaNorte,PST8PDT,US/Pacific
SAST    +02:00  Africa/Johannesburg,Africa/Maseru,Africa/Mbabane
SST     -11:00  Pacific/Pago_Pago,Pacific/Samoa,US/Samoa
UTC     +00:00  Etc/UCT,Etc/UTC,Etc/Universal,Etc/Zulu,UCT,UTC,Universal,Zulu
WAT     +01:00  Africa/Bangui,Africa/Brazzaville,Africa/Douala,Africa/Kinshasa,Africa/Lagos,Africa/Libreville,Africa/Luanda,Africa/Malabo,Africa/Ndjamena,Africa/Niamey,Africa/Porto-Novo
WEST    +01:00  Atlantic/Canary,Atlantic/Faeroe,Atlantic/Faroe,Atlantic/Madeira,Europe/Lisbon,Portugal,WET
WET     +00:00  Atlantic/Canary,Atlantic/Faeroe,Atlantic/Faroe,Atlantic/Madeira,Europe/Lisbon,Portugal,WET
WIB     +07:00  Asia/Jakarta,Asia/Pontianak
WIT     +09:00  Asia/Jayapura
WITA    +08:00  Asia/Makassar,Asia/Ujung_Pandang

tzmap[]上記のawkスクリプトで使用した配列を手動で埋めるのではなく、これらのマッピングを埋める必要があるawkスクリプトからツールの出力を読み取ることができます。

おすすめ記事