Главное при работе с временем и датами в Go — тип данных time.Time, который представляет момент времени с точностью до наносекунды. Каждое значение time.Time связано с местоположением (часовым поясом).
Функция time.Now().Unix()
возвращает популярное время эпохи UNIX, которое представляет собой количество секунд, прошедших с 00:00:00 UTC 1 января 1970 года. Если вы хотите преобразовать время UNIX в эквивалентное значение time.Time, то можете использовать функцию time.Unix().
Для синтаксического анализа используется функция time.Parse()
, и ее полная сигнатура выглядит так: Parse(layout, value string) (Time, error), где layout — это формат, а value — входные данные для анализа. Возвращаемое значение time.Time представляет собой момент времени с точностью до наносекунды и содержит информацию как о дате, так и о времени.
В приведенном ниже коде показано, как работать с временем эпохи в Go, и представлен сам процесс анализа.
package main import ( "fmt" "os" "time" ) func main() { start := time.Now() if len(os.Args) != 2 { fmt.Println("Usage: dates parse_string") return } dateString := os.Args[1] // Сравнение только даты d, err := time.Parse("02 January 2006", dateString) if err == nil { fmt.Println("Full:", d) fmt.Println("Time:", d.Day(), d.Month(), d.Year()) } // Сравнение даты и времени d, err = time.Parse("02 January 2006 15:04", dateString) if err == nil { fmt.Println("Full:", d) fmt.Println("Date:", d.Day(), d.Month(), d.Year()) fmt.Println("Time:", d.Hour(), d.Minute()) } // Сравнение даты с числовым значением месяца и времени d, err = time.Parse("02-01-2006 15:04", dateString) if err == nil { fmt.Println("Full:", d) fmt.Println("Date:", d.Day(), d.Month(), d.Year()) fmt.Println("Time:", d.Hour(), d.Minute()) } // Сравнение только времени d, err = time.Parse("15:04", dateString) if err == nil { fmt.Println("Full:", d) fmt.Println("Time:", d.Hour(), d.Minute()) } t := time.Now().Unix() fmt.Println("Epoch time:", t) // Convert Epoch time to time.Time d = time.Unix(t, 0) fmt.Println("Date:", d.Day(), d.Month(), d.Year()) fmt.Printf("Time: %d:%d\n", d.Hour(), d.Minute()) duration := time.Since(start) fmt.Println("Execution time:", duration) }Данная утилита принимает дату и время и преобразует их в разные часовые пояса. Пример:
loc, _ = time.LoadLocation("America/New_York") fmt.Printf("New York Time: %s\n", now.In(loc))