트랙
/
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 (오전 또는 오후)
분 04 ; 4
초 05 ; 5
오전/오후 표시 PM
연중 일수 002 ; __2

time.Time 타입에는 특정 시간에 접근하는 다양한 메서드가 있어요. 예를 들어 시는 Time.Hour(), 월은 Time.Month() 메서드로 가져올 수 있어요. 이게 어떻게 동작하는지 더 알고 싶다면 공식 문서를 확인해 봐요.

time 패키지에는 경과한 시간을 나타내는 Duration 타입도 있고, 위치와 시간대, 타이머, 그 밖의 관련 기능도 지원해요. 이런 내용은 다른 개념에서 다뤄요.

지침

이 연습 문제에서는 2012년 9월 15일에 문을 연 미용실의 예약 스케줄러를 만들어 봐요.

다섯 개의 과제가 있는데, 모두 예약 날짜와 관련되어 있어요.

1. 예약 날짜 파싱하기

예약 날짜의 텍스트 표현을 해당하는 time.Time 형식으로 파싱하는 Schedule 함수를 구현해요:

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. 예약이 오후인지 확인하기

예약 날짜를 받아서 예약이 오후(12:00 이상 18:00 미만)인지 확인하는 IsAfternoonAppointment 함수를 구현해요:

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. 미용실 개업 기념일 날짜 반환하기

UTC 기준으로 올해 미용실 개업 기념일 날짜를 반환하는 AnniversaryDate 함수를 구현해요.

올해가 2020년이라고 가정해요:

AnniversaryDate()

// => 2020-09-15 00:00:00 +0000 UTC

참고: 반환 값은 time.Time이고, 하루 중 시간은 중요하지 않아요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Go Exercism

미용실 예약 받기 문제를 시작해 볼 준비가 됐나요?

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