Невозможно найти формат ввода времени - PullRequest
0 голосов
/ 11 февраля 2020

Я создаю приложение Go, в которое пользователи могут вводить время в любом формате, как показано ниже:

Default Layout:  2009-11-10 23:00:00 +0000 UTC m=+0.000000001

US Layout:       November 10, 2009

ISO Layout:      2020-02-10

UNIX Time:       1581422196084

Есть ли способ узнать формат ввода времени? Единственное, что я могу найти, - это как преобразовать время из одного формата в другой, но нет ничего общего с поиском существующего формата времени.

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

1 Ответ

1 голос
/ 11 февраля 2020

Вы можете решить, какие макеты необходимо поддерживать из Go макетов (https://programming.guide/go/format-parse-string-time-date-example.html):

    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"

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

Скажем, я хочу поддерживать ANSI C и UnixDate, я могу сделать следующее:

t, err := time.Parse(time.ANSIC, inputTime)
if err == nil {
return t
}

t, err = time.Parse(time.UnixDate, inputTime)
if err == nil {
return t
}

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...