Menu
Coddy logo textTech

특정 시간 생성하기

Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 59번째.

time.Now()가 현재 시각을 제공하지만, 특정 날짜와 시간을 다뤄야 할 때가 자주 있습니다. Go는 사용자가 지정한 날짜와 시간을 나타내는 time.Time 객체를 생성하기 위한 time.Date 함수를 제공합니다.

time.Date 함수는 연, 월, 일, 시, 분, 초, 나노초, 그리고 위치의 정확한 순서로 7개의 매개변수를 받습니다. 기본적인 구문은 다음과 같습니다:

birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)

Go는 월을 나타내기 위해 time.March와 같은 상수를 사용하며, 이는 숫자를 사용하는 것보다 코드를 더 읽기 쉽게 만들어 줍니다. 원하는 경우 정수(1-12)를 사용할 수도 있습니다. 위치(location) 매개변수는 일반적으로 UTC 시간의 경우 time.UTC를, 시스템의 로컬 시간대의 경우 time.Local을 사용합니다.

이 방식은 생일, 마감일 또는 역사적인 날짜와 같이 특정 시점을 생성하는 데 있어 완전한 제어권을 제공합니다. 결과로 생성된 time.Time 객체는 time.Now()에서 생성된 것과 똑같이 작동하며, 모든 동일한 시간 연산에 사용할 수 있습니다.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

challenge icon

챌린지

쉬움

역사 속의 특정 날짜와 시간을 표현하기 위해 time.Date를 사용하는 역사적 사건 타임라인 애플리케이션을 만드세요. 이 챌린지는 정확한 역사적 순간을 위한 time.Time 객체를 생성하고 이를 체계적인 형식으로 표시하는 능력을 테스트합니다.

두 개의 입력을 받게 됩니다:

  • "event1:year:month:day:hour:minute,event2:year:month:day:hour:minute" 형식의 역사적 사건을 포함하는 문자열 (예: "Moon Landing:1969:7:20:20:17,Berlin Wall Fall:1989:11:9:21:0")
  • "option1,option2,option3" 형식의 쉼표로 구분된 표시 옵션을 포함하는 문자열 (예: "chronological,details,summary")

당신의 과제는 다음과 같습니다:

  1. 첫 번째 입력을 쉼표로 분할하여 개별 사건 항목을 가져오도록 파싱합니다.
  2. 각 사건 항목에 대해 콜론으로 분할하여 사건 이름, 연도, 월, 일, 시, 분을 추출합니다.
  3. 숫자 문자열을 정수로 변환하고 각 사건에 대해 time.Date를 사용하여 time.Time 객체를 생성합니다 (location 매개변수에는 time.UTC를 사용하고 초와 나노초에는 0을 사용합니다).
  4. 애플리케이션 헤더를 표시합니다: "=== HISTORICAL TIMELINE APPLICATION ==="
  5. 사건 로딩 확인 메시지를 표시합니다: "Loading historical events..."
  6. 각 사건에 대해 다음을 표시합니다: "Loaded: [event_name] - [complete_time_object]"
  7. 두 번째 입력을 쉼표로 분할하여 표시 옵션을 가져오도록 파싱합니다.
  8. 각 표시 옵션을 처리합니다:
    • "chronological"의 경우: "=== CHRONOLOGICAL ORDER ==="를 표시한 후 날짜순(가장 빠른 순)으로 정렬된 사건을 "[event_name]: [year]-[month]-[day] at [hour]:[minute] UTC" 형식으로 보여줍니다.
    • "details"의 경우: "=== DETAILED INFORMATION ==="를 표시한 후 각 사건에 대해 다음을 보여줍니다:
      • "Event: [event_name]"
      • " Date: [year]-[month]-[day]"
      • " Time: [hour]:[minute] UTC"
      • " Weekday: [weekday_name]"
      • " Unix timestamp: [unix_seconds]"
    • "summary"의 경우: "=== TIMELINE SUMMARY ==="를 표시한 후 다음을 보여줍니다:
      • "Total events: [number_of_events]"
      • "Earliest event: [earliest_event_name] ([year])"
      • "Latest event: [latest_event_name] ([year])"
      • "Time span: [years_between_earliest_and_latest] years"
    • "years"의 경우: "=== EVENTS BY DECADE ==="를 표시한 후 연대별로 그룹화된 사건을 "[decade]s: [comma_separated_event_names]" 형식으로 보여줍니다.
  9. 완료 메시지를 표시합니다: "Historical timeline processing completed"

time.Date로 특정 날짜를 생성하기 위해 time 패키지를, 입력 문자열을 분할하기 위해 strings 패키지를, 숫자 문자열을 정수로 변환하기 위해 strconv 패키지를, 그리고 형식화된 출력을 위해 fmt 패키지를 사용하세요. time.Date는 연도, 월, 일, 시, 분, 초, 나노초, 위치 순서대로 매개변수를 받는다는 점을 기억하세요. 연대순으로 정렬하려면 Before() 메서드를 사용하여 time.Time 객체를 비교할 수 있습니다. 이 챌린지는 Go의 시간 기능을 사용하여 특정 시점을 생성하고 역사적 데이터를 다루는 방법을 보여줍니다.

치트 시트

time.Date를 사용하여 특정 날짜와 시간에 대한 time.Time 객체를 생성합니다:

birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)

time.Date 함수는 정확한 순서대로 7개의 매개변수를 받습니다:

  • 연도 (int)
  • 월 (time.Month 또는 int 1-12)
  • 일 (int)
  • 시 (int)
  • 분 (int)
  • 초 (int)
  • 나노초 (int)
  • 위치 (*time.Location)

가독성을 위해 time.March와 같은 월 상수를 사용하거나 정수(1-12)를 사용하세요. 일반적인 위치는 time.UTCtime.Local입니다.

직접 해보기

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
	"time"
)

func main() {
	// 공백을 적절하게 처리하기 위해 bufio.Scanner를 사용하여 입력을 읽습니다.
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	eventsInput := scanner.Text()
	
	scanner.Scan()
	optionsInput := scanner.Text()
	
	// 입력에서 이벤트를 파싱합니다.
	eventEntries := strings.Split(eventsInput, ",")
	
	// 입력에서 표시 옵션을 파싱합니다.
	displayOptions := strings.Split(optionsInput, ",")
	
	// TODO: 아래에 코드를 작성하세요.
	// 1. 각 이벤트 항목을 파싱하여 이름, 연, 월, 일, 시, 분을 추출합니다.
	// 2. 접근하기 전에 parts 슬라이스에 충분한 요소가 있는지 확인해야 합니다.
	// 3. strconv.Atoi()를 사용하여 문자열 숫자를 정수로 변환합니다.
	// 4. 각 이벤트에 대해 time.Date()를 사용하여 time.Time 객체를 생성합니다.
	// 5. 애플리케이션 헤더와 로딩 메시지를 표시합니다.
	// 6. 각 표시 옵션(연대순, 상세 정보, 요약, 연도)을 처리합니다.
	// 7. 완료 메시지를 표시합니다.
	
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 & 흐름의 모든 레슨