Здесь представлены предопределенные макеты для использования в Time.Format и time.Parse. Эталонное время, используемое в макетах, это конкретное время:
Mon Jan 2 15:04:05 MST 2006
это время Unix 1136239445. Поскольку MST - это GMT-0700, отсчет времени можно рассматривать как
01/02 03:04:05PM '06 -0700
Чтобы определить свой собственный формат, запишите, как будет выглядеть отформатированное эталонное время; посмотрите значения таких констант, как ANSIC, StampMicro или Kitchen, например. Модель должна продемонстрировать, как выглядит эталонное время, чтобы методы Format и Parse могли применять одно и то же преобразование к общему значению времени.
Некоторые допустимые макеты являются недопустимыми значениями времени для time.Parse из-за форматов, таких как _ для заполнения пробелов и Z для информации о зоне.
В строке формата подчеркивание _ представляет пробел, который может быть заменен цифрой, если следующее число (день) имеет две цифры; для совместимости с фиксированными форматами времени Unix.
Десятичная точка, за которой следует один или несколько нулей, представляет собой долю секунды, напечатанную с заданным количеством десятичных знаков. Десятичная точка, за которой следуют одна или несколько девяток, представляет дробную секунду, напечатанную с заданным количеством десятичных знаков, с удалением завершающих нулей. Только при парсинге вход может содержать дробное второе поле сразу после поля секунд, даже если макет не указывает на его наличие. В этом случае десятичная точка, за которой следует максимальный ряд цифр, анализируется как дробная секунда.
Числовой формат смещения часового пояса выглядит следующим образом:
-0700 ±hhmm
-07:00 ±hh:mm
-07 ±hh
Замена знака в формате буквой Z вызывает поведение печати по стандарту ISO 8601 вместо смещения для зоны UTC. Таким образом:
Z0700 Z or ±hhmm
Z07:00 Z or ±hh:mm
Z07 Z or ±hh
Распознанные форматы дня недели - "Mon" и "Monday". Распознаются форматы месяцев: "Jan" и "January".
Форматы 2, _2 и 02 - это не дополненные, дополненные пробелами и дополненные нулями дни месяца. Форматы __2 и 002 - трехсимвольный день года с пробелами и нулями; нет незаполненного формата дня года.
Текст в строке формата, который не распознается как часть эталонного времени, дословно отражается во время форматирования и ожидается, что он будет дословно отображаться при вводе в Parse.
Обратите внимание, что форматы RFC822, RFC850 и RFC1123 должны применяться только к местному времени. Применение их к времени UTC будет использовать "UTC" как сокращение часового пояса, в то время как строго говоря, эти RFC требуют использования "GMT" в этом случае. В общем случае RFC1123Z следует использовать вместо RFC1123 для серверов, которые настаивают на этом формате, а RFC3339 следует отдавать предпочтение новым протоколам. RFC3339, RFC822, RFC822Z, RFC1123 и RFC1123Z полезны для форматирования; при использовании с time.Parse они не принимают все форматы времени, разрешенные RFC. Формат RFC3339Nano удаляет завершающие нули из поля секунд и, следовательно, может не правильно сортировать после форматирования.
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 с числовой зоной
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 с числовой зоной
RFC3339 = "2006-01-02T15:04:05Z07:00"
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
Kitchen = "3:04PM"
// Удобные метки времени.
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"
)
Не существует определения единиц Day или больше, чтобы избежать путаницы при переходе на часовой пояс при переходе на летнее время.
Чтобы подсчитать количество единиц в Duration, разделите:
second := time.Second
fmt.Print(int64(second/time.Millisecond)) // печатает 1000
Чтобы преобразовать целое число единиц в Duration, умножьте:
seconds := 10
fmt.Print(time.Duration(seconds)*time.Second) // печатает 10s
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
Читайте также:
- Как получить текущую метку времени (timestamp) в Golang
- Количество дней между двумя датами в Golang
- Форматирование времени и даты в Golang
Комментариев нет:
Отправить комментарий