트랙
/
C#
C#
/
연습 문제
/
미용실, 세계로 가다
미용실, 세계로 가다

미용실, 세계로 가다

학습 연습 문제

소개

시간

time 개념은 .NET에서 DateTime 구조체를 사용해 다뤄요. 로컬 시간과 UTC 사이를 변환하는 루틴도 있어요. 산술 연산은 TimeSpan의 도움을 받아 수행할 수 있어요.

시간대

TimeZoneInfo 클래스는 시간대 간의 차이를 다루는 루틴을 제공해요. TimeZoneInfo 클래스에는 일광 절약 시간을 다루는 데 도움이 되는 메서드도 들어 있어요.

CultureInfo 클래스는 로캘에 따라 달라지는 날짜 및 시간 형식을 지원해요.

크로스 플랫폼 코딩을 지원하기 위해 RuntimeInformation 클래스를 사용하면 코드가 어느 운영체제에서 실행되는지, 즉 Linux, Windows 또는 OSX인지 알아낼 수 있어요.

지침

이 연습 문제에서는 살롱의 세계로 다시 돌아와요 (처음 소개된 것은 datetimes 연습 문제였죠). 여러 프로젝트에서 그랬듯이, 또 다른 고객이 큰 성공을 거두고 뉴욕 본점 외에도 런던과 파리에 지점을 열었어요.

1. 관리자를 위해 UTC(협정 세계시) 약속의 현지 시간 환산값 제공하기

UTC 시간을 받아 현지 시간으로 반환하는 정적 Appointment.ShowLocalTime() 메서드를 구현해요.

// For a student in NY
Appointment.ShowLocalTime(new DateTime(2030, 7, 25, 13, 45, 0));
// => {2030, 7, 25, 8, 45, 0}

2. 뉴욕, 런던, 파리에서 약속 잡기

살롱은 각자 예약을 받아요. 입력하는 시간은 살롱이 있는 위치의 현지 시간이에요. 예를 들어, 뉴욕 살롱에 약속 시간으로 13:45를 입력하면 고객이 점심 직후에 올 것이라고 기대해요. 마찬가지로 런던 살롱에 13:45를 입력해도 고객이 점심 직후에 도착할 것이라고 기대하죠.

뉴욕, 런던, 파리의 시간대 id를 알아 두면 도움이 돼요.

Mac(OSX)과 Linux에서는 다음과 같아요:

  • 뉴욕 - America/New_York
  • 런던 - Europe/London
  • 파리 - Europe/Paris

Windows에서는 다음과 같아요:

  • 뉴욕 - Eastern Standard Time
  • 런던 - GMT Standard Time
  • 파리 - W. Europe Standard Time

위치와 시간 문자열을 받아 약속의 UTC 시간을 반환하는 정적 Appointment.Schedule() 오버로드를 구현해요.

Schedule() 구현은 한 번 빌드된 코드가 Linux, Windows, Mac에서 실행될 수 있게 해야 해요. 운영 체제를 신경 써야 하는 첫 연습 문제예요. 위에서 설명한 시간대 id의 차이를 수용하려면 별도의 코드 경로가 필요해요.

입력하는 날짜 및 시간 문자열은 유효하다고 보장돼요.

Appointment.Schedule("7/25/2030 13:45:00", Location.Paris);
// => {2030, 7, 25, 11, 45, 0}

3. 약속 전 일정 간격마다 고객에게 알림 제공하기

약속 전 1일(이른 알림), 1시간 45분(표준 알림), 30분(늦은 알림)에 알림을 제공하는 정적 Appointment.GetAlertTime()을 구현해요.

Appointment.GetAlertTime(new DateTime(2030, 7, 25, 14, 45, 0), AlertLevel.Early);
// => {2030, 7, 24, 14, 45, 0}

4. 일광 절약 시간이 최근에 바뀌면 고객에게 알리는 메시지 보내기

지난 7일 동안 일광 절약 시간이 활성화되거나 비활성화되었다면 true를 반환하는 정적 Appointment.HasDaylightSavingChanged()를 구현해요.

Appointment.HasDaylightSavingChanged(new DateTime(2020, 3, 30, 14, 45, 0), Location.London);
// => true

5. 현지 날짜 및 시간 형식으로 약속 입력하기

현지 직원에게 익숙한 형식으로 약속을 잡을 수 있도록, 살롱이 있는 위치의 기본 형식으로 날짜와 시간을 입력할 수 있게 하는 실험적인 루틴을 만들라는 임무를 받았어요.

해당 위치에 적합한 형식의 올바른 날짜 및 시간 문자열을 받아 DateTime 객체로 변환하는 Appointment.NormalizeDateTime() 메서드를 구현해요. 날짜 및 시간을 UTC로 변환하려는 시도는 하지 않아요.

잘못된 형식을 입력하면 값이 1/1/1인 DateTime을 반환해야 해요.

Appointment.NormalizeDateTime("25/11/2019 13:45:00", Location.London);
// => {2019, 11, 25, 13, 45, 0}
Appointment.NormalizeDateTime("25/11/2019 13:45:00", Location.NewYork);
// => {1, 1, 1, 0, 0, 0}
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C# Exercism

미용실, 세계로 가다 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.