Golang time format

Пользователь

Хотел недавно написать программу, где использовались дата и время, и столкнулся с небольшой проблемкой. Каким образом в Go можно форматировать время и дату? Помогите разобраться, а то я что-то совсем туплю.

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket
12 июня 2020 г., 10:15

Пользователь

Go не использует формат yyyy-mm-dd для форматирования времени. Вместо этого вы форматируете специальный параметр макета (layout). Типа так: Mon Jan 2 15:04:05 MST 2006. Так же, как время или дата должны быть отформатированы. (Эту дату легче запомнить, когда она написана как 01/02 03:04:05PM ‘06 -0700.)

12 июня 2020 г., 10:31

Пользователь

gracie: Go не использует формат yyyy-mm-dd для форматирования времени. Вместо этого вы форматируете специальный параметр макета (layout). Типа так: Mon Jan 2 15:04:05 MST 2006. Так же, как время или дата должны быть отформатированы. (Эту дату легче запомнить, когда она написана как 01/02 03:04:05PM ‘06 -0700.)

Это-то понятно. А как сделать так, чтобы Go нормально работал с этим? Есть же какие-то функции и методы для решения этой проблемы. И если можно, покажи на примере реального кода.

12 июня 2020 г., 11:06

Пользователь

Ну вот, смотри:

const (

   layoutISO = "2006-01-02"

   layoutUS = "January 2, 2006"

)

date := "1999-12-31"

t, _ := time.Parse(layoutISO, date)

fmt.Println(t)                 

// 1999-12-31 00:00:00 +0000 UTC

fmt.Println(t.Format(layoutUS))

// December 31, 1999

Функция time.Parse разбирает строку даты, а функция Format форматирует time. Также не забудь подключить библиотеку "time".

12 июня 2020 г., 11:09

Пользователь

Нужно ещё учитывать крайние случае при работе с форматированием даты/времени:

1. Невозможно указать, что час должен отображаться без начального нуля в 24-часовом формате времени.

2. Нельзя указывать полночь как 24:00 вместо 00:00. Типичное использование для этого будет давать часы работы, заканчивающиеся в полночь, например, с 07:00 до 24:00.

3. Невозможно указать время, содержащее високосную секунду: 23:59:60. Фактически, пакет времени предполагает григорианский календарь без високосных секунд.

12 июня 2020 г., 11:25

Пользователь

Спасибо, ребят, очень сильно выручили, теперь всё стало понятно. Пойду дописывать свою программку, только теперь я уже знаю, как сражаться с этой “проблемой”.

12 июня 2020 г., 11:28