Треки
/
Go
Go
/
Вправи
/
Запис на красу
Запис на красу

Запис на красу

Навчальна вправа

Вступ

Тип Time у Go описує момент часу. Інформацію про дату й час можна отримувати, порівнювати та змінювати через його методи, але є також функції, які викликаються на самому пакеті time. Поточну дату й час можна отримати за допомогою функції time.Now.

Функція time.Parse розбирає рядки тексту (англ. string) у значення типу Time. У Go є особливий спосіб визначення макета, який ми очікуємо для розбору. Потрібно написати приклад макета, використовуючи значення з цієї особливої позначки часу: Mon Jan 2 15:04:05 -0700 MST 2006.

Наприклад:

import "time"

func parseTime() time.Time {
    date := "Tue, 09/22/1995, 13:00"
    layout := "Mon, 01/02/2006, 15:04"

    t, err := time.Parse(layout,date) // time.Time, error
}

// => 1995-09-22 13:00:00 +0000 UTC

Метод Time.Format() повертає рядкове подання часу. Так само, як і з функцією Parse, цільовий макет знову задається через приклад, який використовує значення з особливої позначки часу.

Наприклад:

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(1995,time.September,22,13,0,0,0,time.UTC)
    formattedTime := t.Format("Mon, 01/02/2006, 15:04") // string
    fmt.Println(formattedTime)
}

// => Fri, 09/22/1995, 13:00

Параметри макета

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

Час Параметри
Рік 2006 ; 06
Місяць Jan ; January ; 01 ; 1
День 02 ; 2 ; _2 (для провідного 0)
День тижня Mon ; Monday
Година 15 ( 24-годинний формат часу ) ; 3 ; 03 (AM або PM)
Хвилина 04 ; 4
Секунда 05 ; 5
Позначка AM/PM PM
День року 002 ; __2

Тип time.Time має різні методи для доступу до конкретного часу. Наприклад, година: Time.Hour(), місяць: Time.Month(). Докладніше про те, як це працює, можна дізнатися в офіційній документації.

У time є ще один тип, Duration, який представляє час, що минув, а також підтримка локацій і часових поясів, таймерів та іншої повʼязаної функціональності, яку буде розглянуто в іншій концепції.

Вказівки

У цій вправі ми будемо працювати над планувальником записів для салону краси, який відкрився 15 вересня 2012 року.

На нас чекає пʼять завдань, і всі вони повʼязані з датами прийомів.

1. Розберіть дату прийому

Реалізуйте функцію Schedule, щоб перетворити текстове подання дати прийому у відповідний формат time.Time:

Schedule("7/25/2019 13:45:00")
// => 2019-07-25 13:45:00 +0000 UTC

2. Перевірте, чи прийом уже минув

Реалізуйте функцію HasPassed, яка приймає дату прийому й перевіряє, чи був прийом десь у минулому:

HasPassed("July 25, 2019 13:45:00")
// => true

3. Перевірте, чи припадає прийом на другу половину дня

Реалізуйте функцію IsAfternoonAppointment, яка приймає дату прийому й перевіряє, чи припадає прийом на другу половину дня (>= 12:00 і < 18:00):

IsAfternoonAppointment("Thursday, July 25, 2019 13:45:00")
// => true

4. Опишіть час і дату прийому

Реалізуйте функцію Description, яка приймає дату прийому й повертає опис цієї дати й часу:

Description("7/25/2019 13:45:00")
// => "You have an appointment on Thursday, July 25, 2019, at 13:45."

5. Поверніть дату річниці відкриття салону

Реалізуйте функцію AnniversaryDate, яка повертає дату річниці відкриття салону для поточного року в UTC.

Припустімо, що поточний рік - 2020:

AnniversaryDate()

// => 2020-09-15 00:00:00 +0000 UTC

Примітка: повернене значення має тип time.Time, а час доби не має значення.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Go Exercism

Час розпочати Запис на красу?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Go, а також 34 концепції165 вправ та справжнє наставництво від людей, і все це безкоштовно.