Время и дата являются важными компонентами многих программ, от утилит управления временем до веб-приложений. Как программист, вы должны знать, как управлять временем и датой на любом языке, который вы используете.

В Го, время package объединяет функции для управления временем и датой. Вы можете получить доступ к этим функциям в любом исходном файле, импортировав этот пакет.

Итак, что значит манипулировать временем и датой и как вы можете манипулировать временем и датой в Go?

Что такое манипулирование временем и датой?

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

Различные языки программирования имеют свои собственные функции для управления временем и датой. Язык Go обладает обширными возможностями, полезными для этой цели.

Манипуляции со временем и датой могут включать:

  • Получение текущего времени местоположения или часового пояса.
  • Выполнение арифметических операций над временем и датой.
  • Изменение формата ввода/вывода времени и даты.
instagram viewer

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

импорт (
"ФМТ"
"время"
)

Как получить текущее время и дату в Go

Распространенным вариантом использования для управления временем является получение текущего местного времени или текущего времени определенного часового пояса или местоположения.

Чтобы получить время и дату по вашему местному времени или в определенном часовом поясе или месте, вы можете использовать время. В настоящее время() а также время. ЗагрузитьРасположение() функции:

функция главный(){
// Получить текущее время и дату по местному времени
мое время := время. В настоящее время()
ФМТ. Распечатать("Текущее время в ", мое время. Расположение(), " является: ", мое время)

// Другой способ получить местное время
местоположение, _ := время. ЗагрузитьРасположение("Местный") // или время. ЗагрузитьРасположение("")
ФМТ. Распечатать("Текущее время в ", расположение, " является: ", время. Сейчас (). В (местоположение))

// другое место
местоположение, _ = время. ЗагрузитьРасположение("Америка/Нью-Йорк")
ФМТ. Распечатать("Текущее время в ", расположение, " является: ", мое время. В (местоположение))

// получить текущее время в горном часовом поясе (MST)
местоположение, _ = время. ЗагрузитьРасположение("МСТ")
ФМТ. Распечатать("Текущее время в ", расположение, " является: ", мое время. В (местоположение))
}

Запуск программы выше с беги, имя_файла.go производит следующий вывод в терминале:

Метод LoadLocation поддерживает не каждое сокращение местоположения и часового пояса. Согласно Перейти к документации, он поддерживает только местоположения в База данных IANA.org.

Как получить отдельные компоненты с заданной даты

Вы можете получить каждый компонент метки времени отдельно, что аналогично тому, когда работа со временем и датами в JavaScript.

Есть множество способов сделать это с помощью Go. время функции. Этот раздел иллюстрирует каждый метод.

Вы можете использовать Свидание() функция для получения дня, месяца и года, а также Часы() Функция для получения часов, минут и секунд. Например:

функцияглавный() {
мое время := время. В настоящее время();
год, месяц, день := myTime. Свидание()
ФМТ. Println("Год:", год)
ФМТ. Println("Месяц:", месяц)
ФМТ. Println("День:", день)

час, мин, сек := мое время. Часы()
ФМТ. Println("Час:", час)
ФМТ. Println("Минута:", мин)
ФМТ. Println("Секунды:", сек)
}

Вывод иллюстрирует различные части метки времени:

Вы также можете получить единицы временной метки индивидуально с помощью время функции для каждого из них:

функцияглавный() {
мое время := время. В настоящее время()

// получить каждую единицу от года до наносекунды
ФМТ. Println("Год:", myTime. Год())
ФМТ. Println("Месяц:", myTime. Месяц())
ФМТ. Println("День:", myTime. День())
ФМТ. Println("Час :", myTime. Час())
ФМТ. Println("Минута:", myTime. Минута())
ФМТ. Println("Секунды:", myTime. Второй())
ФМТ. Println("Наносекунда :", myTime. Наносекунда())
}

Как видно из вывода, это также дает вам доступ к наносекундам:

Примеры до этого момента были сосредоточены на получении единиц временной метки из текущего времени. Вы можете выполнять те же действия с отметкой времени, которая не время. В настоящее время().

Вы можете извлечь год, месяц, день, час, минуту и ​​секунду заданной даты. Для этого вы должны либо инициализировать новый объект даты, либо проанализировать дату из строки:

функцияглавный() {
// получаем отдельные компоненты времени от года до наносекунды
// с определенной даты
ваше время := время. Свидание(2020, 07, 1, 06, 32, 10, 0, время. УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ)
ФМТ. Println("Год:", вашеВремя. Год())
ФМТ. Println("Месяц:", вашеВремя. Месяц())
ФМТ. Println("День:", вашеВремя. День())
ФМТ. Println("Час :", вашеВремя. Час())
ФМТ. Println("Минута:", вашеВремя. Минута())
ФМТ. Println("Секунды:", вашеВремя. Второй())
ФМТ. Println("Наносекунда :", yourTime. Наносекунда())
// использование функции Clock() для получения часов, минут и секунд
ваш час, ваш мин, ваша секунда := ваше время. Часы()
ФМТ. Println("Час:", вашЧас)
ФМТ. Println("Минута:", yourMin)
ФМТ. Println("Секунды:", ваша Секунда)

// получаем время и дату из строки
ДатаСтрока := "2020-07-0106:32:10"
макет := "2006-01-0215:04:05" // желаемый формат вывода
ваше время, _ = время. Разбор (макет, dateString)
ФМТ. Println("Ваше время: ", ваше время)
ФМТ. Println("Год:", вашеВремя. Год())
ФМТ. Println("Месяц:", вашеВремя. Месяц())
ФМТ. Println("День:", вашеВремя. День())
ФМТ. Println("Час :", вашеВремя. Час())
ФМТ. Println("Минута:", вашеВремя. Минута())
ФМТ. Println("Секунды:", вашеВремя. Второй())
}

Этот код производит следующий вывод:

Обратите внимание, что Parse() использует универсальное глобальное время по умолчанию, если вы не укажете часовой пояс в строке даты.

Как выполнять арифметические операции с датой и временем

Арифметические операции — это еще один тип манипуляций, которые вы можете выполнять со временем и датой в Go. Возможны простые операции, такие как сложение, вычитание и определение разницы во времени.

Go позволяет определить время. Продолжительность значения со всеми единицами времени от время. Час к время. Наносекунда. Вы можете использовать эти значения, чтобы добавить или вычесть время, используя Добавлять(). Существует также ДобавитьДату() функция, которая принимает 3 параметра: годы, месяцы и дни для выполнения сложения или вычитания.

Следующий код демонстрирует использование этих функций:

функцияглавный() {
куртайм := время. В настоящее время()
куртайм = куртайм. Добавить (время. Час) // добавляет один час
ФМТ. Println("Текущее время: ", curTime)
завтра := curTime. Добавить (время. Час * 24)
ФМТ. Println("Завтра в это время: ", завтра)
следующая неделя := curTime. Добавить (время. Час * 24 * 7)
ФМТ. Println("В это время на следующей неделе: ", nextWeek)

// использование AddDate (y, m, d)
следующее завтра := текущее время. ДобавитьДату(0, 0, 2)
ФМТ. Println("На этот раз Следующее завтра: ", nextTomorrow)
следующий месяц := курвремя. ДобавитьДату(0, 1, 0)
ФМТ. Println("На этот раз в следующем месяце: ", nextMonth)
FiveYearsAndOneMonthAfter := curTime. ДобавитьДату(5, 1, 0)
ФМТ. Println("На этот раз через пять лет и один месяц: ", FiveYearsAndOneMonthAfter)
}

Что производит следующий вывод:

Вы также можете вычесть время с помощью Добавлять() а также ДобавитьДату() путем передачи отрицательных параметров. Например:

функцияглавный() {
куртайм := время. В настоящее время()

// вычесть один день, используя AddDate()
вчера := curTime. ДобавитьДату(0, 0, -1)
ФМТ. Println("Это время вчера было: ", вчера)

// вычесть один месяц, используя Add()
последний месяц := куртайм. Добавить (время. Час * -24 * 30)
ФМТ. Println("Это время в прошлом месяце было: ", lastMonth)
}

Производит этот вывод:

Хотя вы можете использовать Добавлять() а также ДобавитьДату() чтобы найти разницу между датами, в Go есть Подпрограмма() функция, которая работает немного по-другому:

функцияглавный() {
куртайм = время. В настоящее время()
прошлое := время. Свидание(2022, время. Декабрь, 25, 12, 0, 0, 0, время. УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ)
разница := прошлое. Подпрограмма (curTime)
ФМТ. Println("Разница между настоящим и прошлым: ", diff)
// получаем разницу в разных единицах измерения
лет := инт(разн. Часы() / 24 / 365)
ФМТ. Println("Годы: ", лет)
месяцев := инт(разн. Часы() / 24 / 30)
ФМТ. Println("Месяцы: ", месяцы)
дней := инт(разн. Часы() / 24)
ФМТ. Println("Дней: ", дней)
часов := инт(разн. Часы())
ФМТ. Println("Часы: ", часы)
// разн. Минуты(), разн. Секунды(), разн. Миллисекунды(), разн. Наносекунды() также возвращают свои единицы измерения.
}

Этот код производит следующий вывод:

Как получить время и дату в различных форматах

Вы также можете получить выходные данные времени и даты в нескольких форматах, используя Формат() функция. Вот некоторые распространенные стили форматирования:

функцияглавный() {
куртайм = время. В настоящее время()
// встроенные стандартные стили форматирования
ФМТ. Println("Текущее время: ", curTime)
ФМТ. Println("Текущее время в формате RFC3339: ", curTime. Формат (время. RFC3339))
ФМТ. Println("Текущее время в формате RFC3339Nano: ", curTime. Формат (время. RFC3339Нано))
ФМТ. Println("Текущее время в формате RFC1123: ", curTime. Формат (время. RFC1123))
ФМТ. Println("Текущее время в формате RFC1123Z: ", curTime. Формат (время. RFC1123Z))
ФМТ. Println("Текущее время в формате RFC822: ", curTime. Формат (время. RFC822))
ФМТ. Println("Текущее время в формате RFC822Z: ", curTime. Формат (время. RFC822Z))
ФМТ. Println("Текущее время в формате RFC850: ", curTime. Формат (время. RFC850))
ФМТ. Println("Текущее время в формате ANSIC: ", curTime. Формат (время. АНСИК))
ФМТ. Println("Текущее время в формате Unix: ", curTime. Формат (время. UnixDate))
// собственные стили форматирования
// ДД-ММ-ГГГГ ЧЧ: ММ: СС
ФМТ. Println("Текущее время в пользовательском формате: ", curTime. Формат("02-01-200615:04:05"))
// ММ-ДД-ГГГГ ЧЧ: ММ: СС
ФМТ. Println("Текущее время в пользовательском формате: ", curTime. Формат("01-02-200615:04:05"))
// ГГГГ-ММ-ДД ЧЧ: ММ: СС
ФМТ. Println("Текущее время в пользовательском формате: ", curTime. Формат("2006-01-0215:04:05"))
// ДД.ММ.ГГГГ
ФМТ. Println("Текущее время в пользовательском формате: ", curTime. Формат("02.01.2006"))
// ДД/ММ/ГГГГ
ФМТ. Println("Текущее время в пользовательском формате: ", curTime. Формат("02/01/2006"))
// 01 фев 2006
ФМТ. Println("Текущее время в пользовательском формате: ", curTime. Формат("02 Ян 2006"))
// 01 февраля 2006 г., понедельник
ФМТ. Println("Текущее время в пользовательском формате: ", curTime. Формат("02 февраль 2006 Понедельник"))
// 01 февраля 2006 Пн 15:04:05
ФМТ. Println("Текущее время в пользовательском формате: ", curTime. Формат("02 февраль 2006 пн 15:04:05"))
}

Эти различные типы форматирования производят следующий вывод:

Управление временем и датой в Go

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

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

Вы можете использовать манипулирование датой и временем для создания простого ежедневного планировщика или приложения планировщика задач.