Получение текущего времени
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 58 из 68.
При работе с датами и временем в программах на Go вам понадобится встроенный пакет time. Этот пакет предоставляет все необходимые функции для работы с операциями, связанными со временем.
Чаще всего начинают с получения текущего времени. В Go это просто сделать с помощью функции time.Now():
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now)
}Функция time.Now() возвращает объект time.Time, представляющий текущий момент времени. При выводе этого объекта отображаются дата и время в удобном для чтения формате, включая информацию о часовом поясе.
Этот объект time.Time содержит всю информацию об этом конкретном моменте времени: год, месяц, день, час, минуту, секунду и даже наносекунды. Он станет основой для всех остальных операций со временем в Go.
Задание
ЛегкоСоздай приложение для учета времени, которое фиксирует текущее время и отображает его в нескольких форматах. Это задание проверит твоё умение использовать функцию time.Now() и работать с объектами time.Time, чтобы извлекать различные компоненты текущего момента.
Ты получишь один входной параметр:
- Строка, содержащая запросы форматов отображения, разделённые запятыми, в формате
"format1,format2,format3"(например,"full,date,time,year,month,day")
Твоя задача:
- Использовать
time.Now(), чтобы зафиксировать текущее время и сохранить его в переменной - Вывести заголовок приложения:
"=== TIME TRACKER APPLICATION ===" - Вывести подтверждение фиксации временной метки:
"Current time captured successfully" - Разобрать входную строку, разделив её по запятым, чтобы получить отдельные запросы форматов
- Вывести заголовок форматов:
"Displaying time in requested formats:" - Для каждого запроса формата вывести информацию о времени в соответствии с указанным форматом:
- Для
"full": вывести"Full timestamp: [complete_time_object]" - Для
"date": вывести"Date only: [year]-[month]-[day]"(использовать компоненты метода Date()) - Для
"time": вывести"Time only: [hour]:[minute]:[second]"(использовать методы Hour(), Minute(), Second()) - Для
"year": вывести"Year: [year_value]"(использовать метод Year()) - Для
"month": вывести"Month: [month_name]"(использовать метод Month()) - Для
"day": вывести"Day: [day_value]"(использовать метод Day()) - Для
"weekday": вывести"Weekday: [weekday_name]"(использовать метод Weekday()) - Для
"unix": вывести"Unix timestamp: [unix_seconds]"(использовать метод Unix())
- Для
- Подсчитать и вывести статистику:
"=== TIME INFORMATION SUMMARY ===""Total formats displayed: [number_of_formats]""Timestamp components extracted: [number_of_unique_components]"
- Вывести дополнительные сведения о времени:
"Additional time details:""- Nanoseconds: [nanosecond_value]"(использовать метод Nanosecond())"- Location: [timezone_location]"(использовать метод Location())"- Is zero time: [true_or_false]"(использовать метод IsZero())
- Вывести сообщение о завершении:
"Time tracking completed - all requested formats processed"
Используй пакет time для работы с объектами времени, пакет strings для разделения входной строки и пакет fmt для форматированного вывода. Помни, что time.Now() возвращает объект time.Time, содержащий всю информацию о текущем моменте, а извлекать отдельные компоненты можно с помощью различных методов этого объекта. Это задание демонстрирует, как зафиксировать текущее время и извлечь разные сведения из одного объекта time.Time.
Попробуйте сами
package main
import (
"fmt"
"strings"
"time"
)
func main() {
// Считайте входные данные
var formatRequests string
fmt.Scanln(&formatRequests)
// Используйте фиксированное время для стабильного вывода (эталонное время Go)
// Вместо time.Now() используйте time.Date для предсказуемых результатов
currentTime := time.Date(2006, 1, 2, 15, 4, 5, 0, time.UTC)
// Разделите запросы на форматирование
formats := strings.Split(formatRequests, ",")
// TODO: Напишите свой код ниже
// Выведите заголовок приложения
// Выведите подтверждение получения временной метки
// Выведите заголовок списка форматов
// Обработайте каждый запрос на форматирование и выведите соответствующий результат
// Используйте map для учёта уникальных компонентов при подсчёте
// Используйте подходящее форматирование (например, %02d для чисел с ведущими нулями)
// Выведите сводную статистику
// Выведите дополнительные сведения о времени
// Выведите сообщение о завершении
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком
Оператор switch с `fallthrough`Выход из вложенных цикловПереход к следующей итерации конкретного циклаОператор `goto`Повторение: расширенное управление циклами4Проект: простой список задач
Настройка проектаДобавление задачи7Обработка ошибок: углублённый разбор
Пользовательские типы ошибокОбёртывание ошибок с помощью `%w`Извлечение исходной ошибки с помощью `errors.Is`Извлечение исходной ошибки с помощью `errors.As`Разбираемся с `panic`Использование `recover`Итоги — безопасное деление10Работа со временем
Получение текущего времениСоздание заданного времениФорматирование времениРазбор строк времениПродолжительность времениАрифметика времениОжидание и тикерыПовторение — простой таймер2Структуры и методы
Определение методов для структурПолучатели-значенияПолучатели-указателиВыбор получателейМетоды и функцииПовторение: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картПовторение — счётчик частоты слов8Проект: простой складской учёт
Обзор проектаПроверка запасов3Интерфейсы (основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование типов интерфейсовПустой интерфейсУтверждения типовПереключатель типовПовторение — формы и поведениеПотренируйтесь самостоятельно: Онлайн-компилятор Go