轨道
/
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

测试会自动把区域文化设置为 en-US,你不需要自己设置或指定它。

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#,全部免费。