Временная марка Parse Go с помощью Go
Go
печатает время с помощью
time.Now().String()
а
2012-12-18 06:09:18.6155554 +0200 FLEST
или
2009-11-10 23:00:00 +0000 UTC
http://play.golang.org/p/8qwq9U_Ri5
Как его разобрать?
Я думаю, FLEST
есть Finland Latvian Estonian Standard Time
Я не в этих странах, и я думаю, я могу получить все виды часовых поясов.
Я не могу найти один общий способ или шаблон для его анализа с помощью time.Parse
Ответы
Ответ 1
Хотя time.Parse()
принимает строку формата, такую как 2006-01-02 15:04:05 -0700 MST
, может быть проще использовать один из 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"
)
Изменить:. Если вы используете строки как способ сохранения или кодирования времени (например, с помощью ограничительного формата кодирования), вы можете захотеть использовать Unix time. Таким образом, вы можете просто сохранить int64
(или два, если вы сохраните количество наносекунд.
Ответ 2
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))
}
Игровая площадка: http://play.golang.org/p/hvqBgtesLd
Смотрите исходный код http://golang.org/src/pkg/time/format.go?s=15404:15450#L607
Ответ 3
Документация на time.String дает формат, который он использует: "2006-01-02 15: 04: 05.999999999 -0700 MST". Начало было бы использовать тот же формат для синтаксического анализа.
Часовые пояса могут быть для вас проблемой. Если вы должны проанализировать время, которое, как вы знаете, были созданы со временем. Строка, но были созданы в других часовых поясах, вы должны иметь зонуинфо для других часовых поясов. См. Документацию в разделе LoadLocation. Если вы не можете получить зонуинфо, не можете установить ее в своей системе или не можете рисковать неудачей в каком-то новом неизвестном часовом поясе, тогда формат time.String не для вас. Вам нужно будет получить отметки времени в другом формате или удалить часовой пояс из строк и проанализировать измененные строки с измененным форматом.