1: Carbon 시작하기

1.1 소개

간단하고 의미 있는 Golang 패키지인 Carbon은 개발자 친화적이며 날짜 및 시간 처리를 위한 뛰어난 인터페이스를 제공합니다.

Carbon을 사용하는 이점:

  • 개발자 친화적: Carbon은 직관적인 날짜 및 시간 처리를 위한 표현력이 풍부한 인터페이스를 제공합니다.
  • 다국어 지원: 날짜 표현을 로컬화할 수 있도록 국제화를 지원합니다.
  • 불변성: Carbon 인스턴스는 변경되지 않으므로 예기치 않은 수정 없이 안전하게 전달될 수 있습니다.
  • 시간대 처리: Carbon은 다른 시간대 간의 날짜 및 시간 관리의 복잡성을 단순화합니다.
  • 풍부한 API: 날짜 및 시간을 생성, 구문 분석 및 형식화하기 위한 포괄적인 함수 세트를 제공합니다.

1.2 설치 가이드

Go 버전 >= 1.16용 설치

Go 버전 1.16 이상에 Carbon 패키지를 설치하려면 다음 명령어를 사용하세요:

go get -u github.com/golang-module/carbon/v2

그런 다음, Go 파일에 패키지를 가져오세요:

import "github.com/golang-module/carbon/v2"

Go 버전 < 1.16용 설치

이전 버전의 Go에는 아래와 같이 Carbon을 설치할 수 있습니다:

go get -u github.com/golang-module/carbon

그리고 마찬가지로 가져오세요:

import "github.com/golang-module/carbon"

v1은 더 이상 활발히 업데이트되지 않지만 버그 수정을 위해 유지될 것입니다.

1.3 첫 번째 Carbon 프로젝트 설정

Carbon의 기본 구성: Carbon을 설치한 후에는 간단히 새로운 Carbon 인스턴스를 생성함으로써 사용을 시작할 수 있습니다. Carbon은 프로젝트의 요구에 맞게 기본 전역 레이아웃, 시간대 및 로케일을 설정하여 사용자 정의할 수 있습니다.

기본 전역 레이아웃, 시간대 및 로케일 설정:

carbon.SetDefault(carbon.Default{
  Layout: carbon.RFC3339Layout,
  Timezone: carbon.PRC,
  Locale: "en",
})

명시적으로 설정하지 않으면 다음과 같이 기본 설정이 적용됩니다 — Layout: "2006-01-02 15:04:05", Timezone: Local, Locale: "en".

2: 기본적인 Carbon 작업

2.1 현재 시간 처리

현재 날짜 및 시간 가져오기

다양한 애플리케이션에서 현재 날짜 및 시간을 가져오는 것은 매우 기본적인 작업입니다. Carbon을 사용하면 carbon.Now() 메서드를 호출하여 현재 날짜 및 시간 인스턴스를 얻을 수 있습니다. 현재 날짜 및 시간을 가져오는 방법을 살펴봅시다:

// Carbon 인스턴스로 현재 날짜와 시간을 가져옵니다.
now := carbon.Now()

fmt.Println("현재 날짜 및 시간:", now)

오늘, 어제, 내일 표시

Carbon은 현재 날짜를 기준으로 날짜에 상대적으로 작업하는 간편한 방법을 제공합니다. 오늘, 어제 및 내일의 날짜 표현을 얻으려면 각각 carbon.Now(), carbon.Yesterday(), carbon.Tomorrow() 메서드를 사용할 수 있습니다:

// 오늘의 날짜와 시간
today := carbon.Now()
fmt.Println("오늘:", today.ToDateTimeString())

// 어제의 날짜와 시간
yesterday := carbon.Yesterday()
fmt.Println("어제:", yesterday.ToDateTimeString())

// 내일의 날짜와 시간
tomorrow := carbon.Tomorrow()
fmt.Println("내일:", tomorrow.ToDateTimeString())

이러한 메서드는 수동 계산 없이 흔히 사용되는 날짜 참조와 간결하게 상호작용할 수 있습니다.

현재 시간의 형식 및 표현

Carbon은 날짜 및 시간을 서로 다른 방식으로 형식화하고 표시하는 다양한 방법을 제공합니다. ISO8601과 같은 표준 형식, 사용자 정의 형식 또는 로컬화된 버전이 필요한 경우 Carbon은 이러한 요구 사항에 맞는 메서드를 제공합니다.

다음은 현재 날짜 및 시간을 여러 가지 방법으로 형식화하는 방법입니다:

// 표준 날짜 및 시간 표현
fmt.Println("RFC3339:", now.ToRFC3339String())
fmt.Println("ISO8601:", now.ToIso8601String())

// 사용자 정의 날짜 및 시간 형식
fmt.Println("사용자 정의:", now.Format("Monday, 02-Jan-06 15:04:05 MST"))

// 사전 정의된 레이아웃 사용
fmt.Println("ANSIC 형식:", now.ToAnsicString())
fmt.Println("UnixDate 형식:", now.ToUnixDateString())
fmt.Println("RubyDate 형식:", now.ToRubyDateString())
fmt.Println("Kitchen 형식:", now.ToKitchenString())

// 사용자 정의 패턴의 경우 Format 메서드 사용
fmt.Println("사용자 정의 패턴:", now.Format("2006-01-02 3:04 PM"))

2.2 Carbon 인스턴스 생성

타임스탬프에서 인스턴스 생성

Go 언어에서 타임스탬프 다루기는 빈번한데, Carbon은 이를 처리하기 위한 직관적인 방법을 제공합니다. 타임스탬프는 특정 이벤트가 발생한 시간을 나타내는 문자열 또는 인코딩된 정보의 시퀀스로, 일반적으로 해당 날짜와 시간을 제공하며 때로는 초의 작은 부분에 정확한 시간을 나타냅니다.

유닉스 타임스탬프로부터 Carbon 인스턴스를 생성하려면, 다양한 정밀도 수준을 사용할 수 있습니다:

// 초 단위 정밀도로 주어진 타임스탬프로부터 Carbon 인스턴스 생성
c1 := carbon.CreateFromTimestamp(1596604455)
fmt.Println(c1.ToString()) // 출력: "202-08-05 13:14:15 +080 CST"

// 더 높은 정밀도(밀리초)를 위해 `CreateFromTimestampMilli`를 사용
c2 := carbon.CreateFromTimestampMilli(1596604455999)
fmt.Println(c2.ToString()) // 출력: "202-08-05 13:14:15.999 +080 CST"

// 마이크로초를 위해 `CreateFromTimestampMicro`를 사용
c3 := carbon.CreateFromTimestampMicro(1596604455999999)
fmt.Println(c3.ToString()) // 출력: "202-08-05 13:14:15.999999 +080 CST"

// 나노초를 위해 `CreateFromTimestampNano`를 사용
c4 := carbon.CreateFromTimestampNano(1596604455999999999)
fmt.Println(c4.ToString()) // 출력: "202-08-05 13:14:15.999999999 +080 CST"

날짜 및 시간 구성 요소에서 인스턴스 생성

만약 날짜의 개별 구성 요소(년, 월, 일)나 시간의 구성 요소(시, 분, 초)가 있다면, Carbon도 이를 처리할 수 있습니다.

// 주어진 날짜만으로부터 Carbon 인스턴스 생성
date := carbon.CreateFromDate(2022, 12, 25)
fmt.Println(date.ToDateString()) // 출력: "2022-12-25"

// 주어진 시간만으로부터 Carbon 인스턴스 생성
time := carbon.CreateFromTime(23, 59, 59)
fmt.Println(time.ToTimeString()) // 출력: "23:59:59"

// 날짜와 시간 모두로부터 Carbon 인스턴스 생성
dateTime := carbon.CreateFromDateTime(2022, 12, 25, 23, 59, 59)
fmt.Println(dateTime.ToDateTimeString()) // 출력: "2022-12-25 23:59:59"

2.3 시간 문자열 파싱

문자열로 된 날짜 및 시간 표현을 다루는 것은 흔한 시나리오입니다. Carbon은 문자열을 Carbon 인스턴스로 파싱하는 것을 편리하게 만들어줍니다.

표준 시간 형식에 대한 carbon.Parse 사용:

// 날짜와 시간이 있는 문자열 파싱
c := carbon.Parse("202-08-05 13:14:15", carbon.PRC)
if c.Error != nil {
    fmt.Printf("오류: %v", c.Error)
} else {
    fmt.Println(c.ToDateTimeString()) // 출력: "202-08-05 13:14:15"
}

// RFC3339 형식의 문자열 파싱
rfc3339 := carbon.Parse("202-08-05T13:14:15+08:00")
fmt.Println(rfc3339.ToString()) // 출력: "202-08-05 13:14:15 +080 CST"

ParseByFormatParseByLayout으로 사용자 정의 형식 처리

carbon.Parse가 직접 처리하지 않는 특정 형식의 문자열 역시 파싱할 수 있습니다.

// 형식에 따른 Carbon 인스턴스로의 시간 문자열 파싱
byFormat := carbon.ParseByFormat("202|08|05 13|14|15", "2006|01|02 15|04|05")
fmt.Println(byFormat.ToDateTimeString()) // 출력: "202-08-05 13:14:15"

// 레이아웃에 따른 Carbon 인스턴스로의 시간 문자열 파싱
byLayout := carbon.ParseByLayout("202|08|05", "2006|01|02")
fmt.Println(byLayout.ToDateString()) // 출력: "202-08-05"

오류 처리

파싱이 성공했는지를 확인하기 위해 항상 Error 필드를 확인해야 합니다:

invalidDate := carbon.Parse("This is not a date", carbon.PRC)
if invalidDate.IsInvalid() {
    fmt.Println("날짜 파싱 오류:", invalidDate.Error)
}

날짜와 시간을 다루는 과정에서 예상치 못한 결과나 시스템 충돌을 방지하기 위해 강력한 오류 확인이 중요함을 명심하십시오.