Определить пользовательский формат времени - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь написать строку формата даты в соответствии с требованиями моего приложения.Используя пакет Go time, я получаю формат, используя неуклюжую функцию (см. Ниже).

Кроме того, поскольку эта функция будет вызываться миллионы раз каждый день, я хочу, чтобы она также была суперэффективной.Есть ли в Go форматирование в стиле POSIX?

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()
    fmt.Printf("Time now is %d%02d%02d%02d%02d%02d",
        t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
}

1 Ответ

0 голосов
/ 10 июня 2018

В Go есть встроенные макеты для перехода к методу .Format() Time ( см. func (Time) Format), один из них может быть тем, что вы ищете:

func main() {
    fmt.Println(time.Now().Format(time.ANSIC))
    fmt.Println(time.Now().Format(time.UnixDate))
    fmt.Println(time.Now().Format(time.RFC3339))
}

Это будет быстрее, чем fmt.Printf("...", t.Year(), t.Month(), ...), но мы говорим о микросекундах "быстрее", так что на самом деле большой разницы нет.

Вывод:

Sun Jun 10 13:18:09 2018
Sun Jun 10 13:18:09 UTC 2018
2018-06-10T13:18:09Z

Есть намного больше предопределенных макетов, так что вы можете проверить их все и посмотреть, соответствует ли один из них вашим потребностям.Вот они прямо из исходного кода:

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"
)

Кроме этого, это просто вопрос создания собственного макета , разницы на самом деле нет.


Для того, чтобы создать строку пользовательского макета, цитаты из документации:

строка раскладка используется Parse функции и Format метод показывает пример, как должна быть представлена ​​ссылка времени.Подчеркнем, что нужно показать, как форматируется эталонное время, а не время по выбору пользователя .Таким образом, каждая строка макета является представлением метки времени: Jan 2 15:04:05 2006 MST.

Так, например:

fmt.Println(time.Now().Format("Mon January 2, 2006 - 15:04:05.000"))

дает:

Sun June 10, 2018 - 17:49:32.557

Если вы хотите что-то другое, вам просто нужно отформатировать дату Jan 2 15:04:05 2006 MST, как бы вы хотели, чтобы она отображалась. Вы также можете взглянуть на соответствующую страницу на ходу.по примеру.

...