學習軌道
/
Go
Go
/
練習
/
預約美容
預約美容

預約美容

學習練習

簡介

在 Go 中,Time是一種用來描述某個時間點的型別。日期和時間資訊可以透過它的方法來存取、比較和操作,不過也有一些函式是直接在time套件上呼叫的。目前的日期和時間則可以透過time.Now函式取得。

time.Parse函式會把字串解析成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,用來表示經過的時間,另外也支援時區、計時器,以及其他相關功能,這些會在另一個概念中介紹。

說明

在這道練習中,你會為一間在 2012 年 9 月 15 日開幕的美容沙龍製作預約排程系統。

這五個任務都與預約日期有關。

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,透過 34 個概念165 個練習 和真人引導來學習並精通 Go,全部免費。