Функция Parse
func Parse(layout, value string) (Time, error)
Parse разбирает отформатированную строку и возвращает значение времени, которое она представляет. layout определяет формат, показывая, как эталонное время, определенное как
Mon Jan 2 15:04:05 -0700 MST 2006
будет интерпретироваться, если бы это было значение; layout служит примером формата ввода. Такая же интерпретация будет затем сделана для входной строки.
Предопределенные макеты ANSIC, UnixDate, RFC3339 и другие описывают стандартные и удобные представления эталонного времени.
Элементы, опущенные в value, предполагаются равными нулю или, если ноль невозможен, равны единице, поэтому анализ "3:04pm" возвращает время, соответствующее Jan 1, year 0, 15:04:00 UTC (обратите внимание, что, поскольку год 0, это время до нулевого Time). Годы должны быть в диапазоне 0000..9999. День недели проверяется на синтаксис, но в противном случае он игнорируется.
Для макетов с указанием двузначного года 06 значение NN >= 69 будет рассматриваться как 19NN, а значение NN < 69 будет рассматриваться как 20NN.
При отсутствии индикатора часового пояса Parse возвращает время в UTC.
При анализе времени со смещением зоны, например -0700, если смещение соответствует часовому поясу, используемому текущим местоположением (Local), то Parse использует это местоположение и зону в возвращенном времени. В противном случае он записывает время, как находящееся в сфабрикованном месте, со временем, зафиксированным в заданном смещении зоны.
При разборе времени с аббревиатурой зоны, такой как MST, если аббревиатура зоны имеет определенное смещение в текущем местоположении, то это смещение используется. Аббревиатура зоны "UTC" распознается как UTC независимо от местоположения. Если аббревиатура зоны неизвестна, Parse записывает время, как находящееся в сфабрикованном месте с данной аббревиатурой зоны и нулевым смещением. Этот выбор означает, что такое время может быть проанализировано и переформатировано с той же компоновкой без потерь, но точный момент, используемый в представлении, будет отличаться фактическим смещением зоны. Чтобы избежать таких проблем, предпочитайте временные макеты, которые используют числовое смещение зоны, или используйте ParseInLocation.
Пример использования Parse
package main
import (
"fmt"
"time"
)
func main() {
// longForm показывает в качестве примера,
// как эталонное время
// будет представлено в желаемом макете.
const longForm = "Jan 2, 2006 at 3:04pm (MST)"
t, _ := time.Parse(longForm, "Feb 3, 2013 at 7:54pm (PST)")
fmt.Println(t)
// shortForm это другой способ
// как будет представлено эталонное время
// в нужном макете; нет часового пояса.
// Примечание: без явной зоны возвращает время в UTC.
const shortForm = "2006-Jan-02"
t, _ = time.Parse(shortForm, "2013-Feb-03")
fmt.Println(t)
// Некоторые допустимые макеты являются
// недопустимыми значениями времени
// из-за спецификаторов формата
// например _ для пробела и Z для информации о зоне.
// Например, макет RFC3339 2006-01-02T15:04:05Z07:00
// содержит как Z, так и смещение часового пояса
// для обработки обеих допустимых опций:
// 2006-01-02T15:04:05Z
// 2006-01-02T15:04:05+07:00
t, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05Z")
fmt.Println(t)
t, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05+07:00")
fmt.Println(t)
_, err := time.Parse(time.RFC3339, time.RFC3339)
fmt.Println("error", err)
// Возвращает ошибку,
// поскольку макет не является допустимым значением
}
Вывод:
2013-02-03 19:54:00 +0000 PST
2013-02-03 00:00:00 +0000 UTC
2006-01-02 15:04:05 +0000 UTC
2006-01-02 15:04:05 +0700 +0700
error parsing time "2006-01-02T15:04:05Z07:00": extra text: 07:00
Функция ParseInLocation
func ParseInLocation(layout, value string, loc *Location) (Time, error)
ParseInLocation похож на Parse, но отличается двумя важными способами. Во-первых, при отсутствии информации о часовом поясе Parse интерпретирует время как UTC; ParseInLocation интерпретирует время как в переданном местоположении. Во-вторых, когда задано смещение или сокращение зоны, Parse пытается сопоставить его с Local местоположением; ParseInLocation использует переданное местоположение.
Пример использования ParseInLocation
package main
import (
"fmt"
"time"
)
func main() {
loc, _ := time.LoadLocation("Europe/Berlin")
// Будет искать имя CEST в часовом поясе Europe/Berlin.
const longForm = "Jan 2, 2006 at 3:04pm (MST)"
t, _ := time.ParseInLocation(longForm, "Jul 9, 2012 at 5:02am (CEST)", loc)
fmt.Println(t)
// Примечание:
// без явной зоны возвращает время в указанном location.
const shortForm = "2006-Jan-02"
t, _ = time.ParseInLocation(shortForm, "2012-Jul-09", loc)
fmt.Println(t)
}
Вывод:
2012-07-09 05:02:00 +0200 CEST
2012-07-09 00:00:00 +0200 CEST
Читайте также:
- Пакет time в Golang, тип Time
- Пакет time в Golang, функции Date, Now, Unix
- Пакет time в Golang, тип Ticker
Комментариев нет:
Отправить комментарий