2012-12-30 21 views
10

Go drukuje czas zParse Go datownik za pomocą Go

time.Now().String() 

jak

2012-12-18 06:09:18.6155554 +0200 FLEST 

lub

2009-11-10 23:00:00 +0000 UTC 

http://play.golang.org/p/8qwq9U_Ri5

Jak mogę analizować je?

Chyba FLEST jest Finland Latvian Estonian Standard Time Nie jestem w tych krajach i domyślam się, że mogę uzyskać wszystkie strefy czasowe. nie mogę znaleźć jeden zunifikowany sposób lub wzór do analizowania go time.Parse

+0

Myślałem, że to błąd w ruchu. Go zawiera plik 'lib/time/zoneinfo.zip', który" zawiera "wiele stref czasowych, ale nie FLEST. Ale potem zastanawiam się, dlaczego FLEST został wydrukowany w pierwszej kolejności ... – topskip

+0

Mój Windows 7 PC drukuje strefę czasową FLEST w pliku dziennika i ten sam komputer nie może przeanalizować tej strefy? – Max

Odpowiedz

10
package main 

import (
"fmt" 
"time" 
) 

func main() { 
    fmt.Println(time.Now()) 
    date := "2009-11-10 23:00:00 +0000 UTC" 
    t, err := time.Parse("2006-01-02 15:04:05 -0700 MST", date) 
     if err != nil { 
       fmt.Println("parse error", err.Error()) 
     } 
     fmt.Println(t.Format(time.ANSIC)) 
} 

Playground: http://play.golang.org/p/hvqBgtesLd

zobaczyć kod źródłowy w http://golang.org/src/pkg/time/format.go?s=15404:15450#L607

+0

Analizuje drugą datę, ale nie pierwszą. http://play.golang.org/p/ekR_xIM2Pf – Max

+0

@Max masz rację, oczywiście. Przepraszam. – topskip

12

Choć time.Parse() akceptuje ciąg formatu takich jak 2006-01-02 15:04:05 -0700 MST, może być prostsze użycie jednego z zdefiniowanych w czasie constants.

const (
    ANSIC  = "Mon Jan _2 15:04:05 2006" 
    UnixDate = "Mon Jan _2 15:04:05 MST 2006" 
    RubyDate = "Mon Jan 02 15:04:05 -0700 2006" 
    RFC822  = "02 Jan 06 15:04 MST" 
    RFC822Z  = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone 
    RFC850  = "Monday, 02-Jan-06 15:04:05 MST" 
    RFC1123  = "Mon, 02 Jan 2006 15:04:05 MST" 
    RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone 
    RFC3339  = "2006-01-02T15:04:05Z07:00" 
    RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00" 
    Kitchen  = "3:04PM" 
    // Handy time stamps. 
    Stamp  = "Jan _2 15:04:05" 
    StampMilli = "Jan _2 15:04:05.000" 
    StampMicro = "Jan _2 15:04:05.000000" 
    StampNano = "Jan _2 15:04:05.000000000" 
) 

Edit: Jeśli używasz ciągi jako sposób przechowywania lub czas kodowania (takie jak z restrykcyjnej formacie kodowania), można rozważyć użycie Unix time. W ten sposób możesz po prostu przechowywać int64 (lub dwa, jeśli zachowasz liczbę nanosekund)

+0

Nic nie działa, aby parsować '" 2012-12-18 06: 09: 18.6155554 +0200 FLEST "' - "czas analizowania błędu parsowania" 2012-12-18 06: 09: 18.6155554 +0200 FLEST "as" 2006-01 -02 15:04:05 -0700 MST ": nie można parsować" FLEST "jako" MST "' – Max

5

Dokumentacja dla time.String podaje format, którego używa: "2006-01-02 15: 04: 05.999999999 -0700 MST. "Początkiem byłoby użycie tego samego formatu do analizowania."

Strefy czasowe mogą być dla Ciebie problemem. Jeśli musisz przeanalizować czasy, które znasz, zostały wyprodukowane z czasem.String, ale zostały wyprodukowane w innym czasie strefy, musisz mieć zoneinfo dla innych stref czasowych Zobacz dokumentację w obszarze LoadLocation Jeśli nie możesz uzyskać informacji zoneinfo, nie możesz zainstalować jej w systemie lub nie możesz ryzykować awarii w nowej nieznanej strefie czasowej, to format time.String nie jest dla Ciebie, musisz uzyskać znaczniki czasu w innym formacie lub usunąć czas strefę z łańcuchów i przeanalizuj zmodyfikowane łańcuchy o zmodyfikowanym formacie.

+0

Nie działa też http://play.golang.org/p/xXJnS1dLIc – Max

+0

Okazuje się, że jest błąd w wersji 1.0 .3 który jest teraz naprawiony w końcówce, która zachowała format .999. Twój problem z FLEST jest oddzielny. Zalecam usunięcie strefy czasowej z końca łańcucha, o czym wspomniałem. Prawdopodobnie poradziłbym sobie z błędem, wyszukując nazwę strefy "FLEST" w komunikacie o błędzie i jeśli został znaleziony, a następnie ponowił próbę usunięcia nazwy strefy zarówno z ciągu, jak i formatu. – Sonia