#go
#Вперед
Вопрос:
Я знаю, что нам нужно использовать время.Интерфейс времени для дат в Go.
И для форматирования нам нужно использовать функцию format.
http://golang.org/pkg/time/#Time .Формат
Но какие допустимые и разные форматы доступны для time.Время в Golang?
Комментарии:
1. Вы можете создать свой собственный или использовать определенные константы: golang.org/pkg/time/#pkg-constants
2. Почему бы вам не прочитать всю документацию, на которую вы ссылались? Смотрите абзац golang.org/pkg/time/#pkg-constants . И
time.Time
это не интерфейс.3. Спасибо, Фолькер, сделаю чтение.
Ответ №1:
Документы для time.Форматировать, скажем http://golang.org/pkg/time/#Time .Формат:
Предопределенные разметки ANSIC, UnixDate, RFC3339 и другие описывают стандартные и удобные представления опорного времени. Для получения дополнительной информации о форматах и определении опорного времени смотрите документацию для ANSIC и других констант, определенных этим пакетом.
Итак, в константах http://golang.org/pkg/time/#pkg-constants:
Чтобы определить свой собственный формат, запишите, как будет выглядеть исходное время в вашем формате; смотрите значения констант, таких как ANSIC, StampMicro или Kitchen, для примеров. Модель предназначена для демонстрации того, как выглядит эталонное время, чтобы методы Format и Parse могли применить одно и то же преобразование к общему значению времени.
Короче говоря: вы записываете базовое время Mon Jan 2 15:04:05 MST 2006
в нужном вам формате и передаете эту строку в Time.Формат ()
Как сказал @Volker, пожалуйста, ознакомьтесь с документами и прочитайте о разнице между типами и интерфейсами.
Ответ №2:
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now()
fmt.Println(t.Format(time.Kitchen))
t := time.Now()
tf := t.Format("2006-01-02 15:04:05-07:00")
fmt.Println(tf)
}
Ответ №3:
На случай, если вам нужен пользовательский макет и / или возникли проблемы со сборкой макетов.
type Rtime struct {
Year int
Month int
Day int
Hour int
Minute int
Second int
Nanosecond int
Millisecond int
Offset int
OffsetString string
Zone string
}
func (rt *Rtime) LocalNow() {
t := time.Now()
rt.Hour,rt.Minute,rt.Second = t.Clock()
rt.Nanosecond = t.Nanosecond()
rt.Millisecond = rt.Nanosecond / 1000000
rt.Month = int(t.Month())
rt.Day = t.Day()
rt.Year = t.Year()
rt.OffsetString = ""
rt.Zone, rt.Offset = t.Local().Zone()
if rt.Offset > 0 {
rt.OffsetString = fmt.Sprintf(" dd",
rt.Offset/(60*60),
rt.Offset%(60*60)/60)
} else {
rt.OffsetString = fmt.Sprintf("dd",
rt.Offset/(60*60),
rt.Offset%(60*60)/60)
}
}
str := fmt.Sprintf("d-d-d d:d:d.d %s %s %d",
rt.Year,rt.Month,rt.Day,rt.Hour,rt.Minute,rt.Second,
rt.Millisecond,rt.Zone,rt.OffsetString,rt.Nanosecond)
fmt.Println(str)
вывод
2021-06-06 09:21:54.949 EEST 0300 949861778
Ответ №4:
Golang предписывает различные стандарты, которым необходимо следовать для получения действительных дат.
Доступно в http://golang.org/pkg/time/#Time .Формат