Временная марка 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 (или два, если вы сохраните количество наносекунд.

Ответ 3

Документация на time.String дает формат, который он использует: "2006-01-02 15: 04: 05.999999999 -0700 MST". Начало было бы использовать тот же формат для синтаксического анализа.

Часовые пояса могут быть для вас проблемой. Если вы должны проанализировать время, которое, как вы знаете, были созданы со временем. Строка, но были созданы в других часовых поясах, вы должны иметь зонуинфо для других часовых поясов. См. Документацию в разделе LoadLocation. Если вы не можете получить зонуинфо, не можете установить ее в своей системе или не можете рисковать неудачей в каком-то новом неизвестном часовом поясе, тогда формат time.String не для вас. Вам нужно будет получить отметки времени в другом формате или удалить часовой пояс из строк и проанализировать измененные строки с измененным форматом.