F#의 DateTime은 날짜와 시간 정보를 모두 담고 있는 불변 객체예요. DateTime 인스턴스는 메서드를 호출해서 다뤄요. 한 번 DateTime을 만들면 그 값은 절대 바뀌지 않아요. DateTime을 수정하는 것처럼 보이는 메서드나 함수도 사실은 새로운 DateTime을 반환해요.
날짜와 시간을 글로 표현하는 방식은 문화권 에 따라 달라요. 날짜가 2019년 3월 28일로, 시간이 14:30:59로 설정된 DateTime을 생각해 봐요. 이 DateTime을 en-US 문화권(미국 영어)에서 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"테스트는 자동으로 문화권을 en-US로 설정해요. 문화권을 직접 설정하거나 지정할 필요는 없어요.
예약 날짜의 텍스트 표현을 해당하는 DateTime 형식으로 파싱할 수 있는 schedule 함수를 구현해요.
schedule "7/25/2019 13:45:00"
// => DateTime(2019, 7, 25, 13, 45, 0)
예약 날짜를 받아서 예약이 과거의 어느 시점이었는지 확인하는 hasPassed 함수를 구현해요.
hasPassed (DateTime(1999, 12, 31, 9, 0, 0))
// => true
예약 날짜를 받아서 예약이 오후(12:00 이상, 18:00 미만)인지 확인하는 isAfternoonAppointment 함수를 구현해요.
isAfternoonAppointment (DateTime(2019, 03, 29, 15, 0, 0))
// => true
예약 날짜를 받아서 그 날짜와 시간에 대한 설명을 반환하는 description 함수를 구현해요.
description (DateTime(2019, 03, 29, 15, 0, 0))
// => "You have an appointment on 3/29/2019 3:00:00 PM."
올해의 기념일 날짜인 9월 15일을 반환하는 anniversaryDate 함수를 구현해요.
anniversaryDate()
// => DateTime(2019, 9, 15, 0, 0, 0)
Exercism에 가입하고 F# 트랙을 개념 18개연습 문제 148개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.