Тип 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 року.
На нас чекає пʼять завдань, і всі вони повʼязані з датами прийомів.
Реалізуйте функцію Schedule, щоб перетворити текстове подання дати прийому у відповідний формат time.Time:
Schedule("7/25/2019 13:45:00")
// => 2019-07-25 13:45:00 +0000 UTC
Реалізуйте функцію HasPassed, яка приймає дату прийому й перевіряє, чи був прийом десь у минулому:
HasPassed("July 25, 2019 13:45:00")
// => true
Реалізуйте функцію IsAfternoonAppointment, яка приймає дату прийому й перевіряє, чи припадає прийом на другу половину дня (>= 12:00 і < 18:00):
IsAfternoonAppointment("Thursday, July 25, 2019 13:45:00")
// => true
Реалізуйте функцію Description, яка приймає дату прийому й повертає опис цієї дати й часу:
Description("7/25/2019 13:45:00")
// => "You have an appointment on Thursday, July 25, 2019, at 13:45."
Реалізуйте функцію AnniversaryDate, яка повертає дату річниці відкриття салону для поточного року в UTC.
Припустімо, що поточний рік - 2020:
AnniversaryDate()
// => 2020-09-15 00:00:00 +0000 UTC
Примітка: повернене значення має тип time.Time, а час доби не має значення.
Зареєструйтеся на Exercism, щоб вивчати й опановувати Go, а також 34 концепції165 вправ та справжнє наставництво від людей, і все це безкоштовно.