Временная разметка в Golang

#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 .Формат