1

Goのタイムパッケージを使用UnixDateして、フォーマットされた時間文字列をフォーマットされた時間に変換しています。RFC3339これは簡単なようで、私のローカルマシンではうまく機能しますが、リモートホストで実行すると、タイムゾーン情報が失われるようです。

入力時刻は東部オーストラリア標準時(EST)であり、によってUTCとして解釈されるようtime.Parse()です。

ここで利用可能なコードスニペット:

package main

import "fmt"
import "time"

func main() {
    t,_ := time.Parse(time.UnixDate,"Mon Jan 14 21:50:45 EST 2013")
    fmt.Println(t.Format(time.RFC3339))  // prints time as Z

    t2,_:=time.Parse(time.RFC3339,t.Format(time.RFC3339))
    fmt.Println(t2.Format(time.UnixDate)) // prints time as UTC
}

ロケールなどを具体的に設定する必要がありますか?

4

1 に答える 1

3

Go でのタイムゾーンの解析が常に期待どおりに機能するとは限りません。しかし、タイムゾーンの略称はあいまいであるため、これは大きな問題です。たとえば、あなたのシナリオの EST は、オーストラリア東部標準時 (GMT+11) または東部標準時 (GMT-5) を意味しますか?

現地時間が「東オーストラリア標準時」の場合、Go は現地時間であると想定します。そのため、ローカルコンピューターで機能しました。しかし、サーバーはそれを現地時間として使用していないため、シドニー時間を意味すると想定する理由はありません. 代わりに、Go はどちらの EST タイムゾーンも選択せず、名前が「EST」であるが UTC の効果を持つ偽の time.Location を作成します。もともと EST であることが意図されていたことを伝える唯一の方法は、 を呼び出すことt.Location().String()です。

time パッケージの作成者は、タイムゾーンの解析がどのように機能するかを説明するバグ レポートを ここに書きました。

于 2013-01-14T13:48:35.373 に答える