學習軌道
/
F#
F#
/
練習
/
預約美容
預約美容

預約美容

學習練習

簡介

日期時間

F# 中的 DateTime 是不可變的物件,同時包含日期和時間資訊。DateTime實例是透過呼叫其方法來操作的。一旦建構出 DateTime,它的值就永遠不會改變。任何看似會修改 DateTime 的方法或函式,實際上都會回傳一個新的 DateTime。

日期和時間的文字表示法取決於文化特性。假設有個 DateTime,日期設為 2019 年 3 月 28 日,時間設為 14:30:59。在 en-US 文化特性(美式英文)下,把這個 DateTime 轉成 string,會回傳 "3/28/19 2:30:59 PM"。改成 fr-BE 文化特性(比利時法文)時,同樣的程式碼則會回傳不同的值:"28/03/19 14:30:59"。

了解哪些 DateTime 方法與文化特性有關,是很重要的事。一般來說,任何處理 string(無論是輸入還是輸出)的 DateTime 方法,都會取決於目前的文化特性。

說明

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

你有四個任務,全都會牽涉到預約日期。日期和時間會採用下列三種格式的其中一種:

  • "7/25/2019 13:45:00"
  • "July 25, 2019 13:45:00"
  • "Thursday, July 25, 2019 13:45:00:00"
Caution

測試會自動將 culture 設定為en-US,你不需要自行設定或指定 culture。

1. 解析預約日期

實作schedule函式,將預約日期的文字表示法解析成對應的DateTime格式:

schedule "7/25/2019 13:45:00"
// => DateTime(2019, 7, 25, 13, 45, 0)

2. 檢查預約是否已經過去

實作hasPassed函式,它會接收預約日期,並檢查該預約是否發生在過去的某個時間點:

hasPassed (DateTime(1999, 12, 31, 9, 0, 0))
// => true

3. 檢查預約是否在下午

實作isAfternoonAppointment函式,它會接收預約日期,並檢查該預約是否在下午(>= 12:00 且 < 18:00):

isAfternoonAppointment (DateTime(2019, 03, 29, 15, 0, 0))
// => true

4. 描述預約的時間和日期

實作description函式,它會接收預約日期,並回傳該日期和時間的描述:

description (DateTime(2019, 03, 29, 15, 0, 0))
// => "You have an appointment on 3/29/2019 3:00:00 PM."

5. 回傳週年紀念日

實作anniversaryDate函式,它會回傳今年的週年紀念日,也就是 9 月 15 日:

anniversaryDate()
// => DateTime(2019, 9, 15, 0, 0, 0)
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
F# Exercism

準備好開始 預約美容 了嗎?

註冊 Exercism,透過 18 個概念148 個練習 和真人引導來學習並精通 F#,全部免費。