2015-01-16 3 views
25

Ich brauche die aktuelle Zeit in verschiedenen Zeitzonen.Wie erhalte ich den aktuellen Zeitstempel in anderen Zeitzonen in Golang?

Zur Zeit weiß ich, dass wir folgendes tun:

t := time.Now() 
fmt.Println("Location:", t.Location(), ":Time:", t) 
utc, err := time.LoadLocation("America/New_York") 
if err != nil { 
    fmt.Println("err: ", err.Error()) 
} 
fmt.Println("Location:", utc, ":Time:", t.In(utc)) 

Der LoadLocation Name ein Ortsname in eine Datei in der IANA-Zeitzone-Datenbank entspricht, wie „Amerika/New_York“ genommen werden soll.

Gibt es einen einfacheren Weg, um die aktuelle Zeit zu erhalten, wenn der Ländername oder der GMT-Offset zB +530 für Indien gegeben ist?

Edit: Ich möchte auch Tag Licht sparen unterstützen.

+1

Zwar gibt es einige Fälle, in denen Versatz eine Befestigung durch geeignete, in der Regel ist es besser, die 'Kontinent/City' zu verwenden. Zeitzonen und Regeln für die Sommerzeit sind politisch und ändern sich. Wenn Sie "Kontinent/Stadt" verwenden, kann Ihre Anwendung sich an diese Änderungen anpassen, wenn die zugrunde liegende IANA-Zeitzonendatenbank aktualisiert wird. Es wird auch auf die Sommerzeit für Sie sorgen. – Schwern

Antwort

10

Nein, das ist der beste Weg. Sie können Ihre benutzerdefinierte Location mit FixedZone erstellen und diesen benutzerdefinierten Speicherort verwenden.

FixedZone gibt einen Standort zurück, der immer den angegebenen Zonennamen und Offset (Sekunden östlich von UTC) verwendet.

+3

Danke Fabrizio! Ich möchte auch die Sommerzeit unterstützen. Irgendwelche Hinweise darauf? –

+1

Ich weiß nicht, wie ich benutzerdefinierte Einstellungen für die Sommerzeit festlegen kann, aber die Zeitzonen aus der Datenbank unterstützen bereits die Sommerzeit. – MffnMn

13
//init the loc 
loc, _ := time.LoadLocation("Asia/Shanghai") 

//set timezone, 
now := time.Now().In(loc) 
+2

Ich nehme an, du meinst jetzt: = time.Now(). In (loc) –

Verwandte Themen