Go에서 날짜 및 시간을 구문 분석하기 위한 실용 가이드

12991 단어 go

표준 형식이 아닌 날짜/시간을 사용하는 경우가 종종 있습니다. 여기에서 날짜 시간의 패턴을 식별한 다음 사용자 지정 레이아웃을 작성하려고 합니다.

표준 시간 패키지를 사용하여 이를 어떻게 달성할 수 있는지 살펴보겠습니다. time 패키지는 우리의 목적에 맞는 Parse 및 Format과 같은 기능을 포함하는 여러 기능을 제공합니다.

구문 분석

Parse parses a formatted string and returns the time value it represents.



func Parse(layout, value string) (Time, error)



package main

import (
    "fmt"
    "time"
)

func main() {
    const longForm = "Jan 2, 2006 at 3:04pm (MST)"
    t, _ := time.Parse(longForm, "Feb 3, 2013 at 7:54pm (PST)")
    fmt.Println(t)

    const shortForm = "2006-Jan-02"
    t, _ = time.Parse(shortForm, "2013-Feb-03")
    fmt.Println(t)
}



Output:
2013-02-03 19:54:00 +0000 PST
2013-02-03 00:00:00 +0000 UTC


플레이그라운드 링크로 이동: Parse Example

체재

Format returns a textual representation of the time value formatted according to the layout defined by the argument.



func (t Time) Format(layout string) string



func main() {
    t, err := time.Parse(time.UnixDate, "Wed Feb 25 11:06:39 PST 2015")
    if err != nil { // Always check errors even if they should not happen.
        panic(err)
    }

    fmt.Println("default format:", t)

    fmt.Println("Unix format:", t.Format(time.UnixDate))
}



Output:
default format: 2015-02-25 11:06:39 +0000 PST
Unix format: Wed Feb 25 11:06:39 PST 2015


플레이그라운드 링크로 이동: Format Example

시간 패키지에서 사용 가능한 사전 정의된 레이아웃




상표
정의


형세
01/02 03:04:05PM '06 -0700

앤식
2006년 1월 2일 월요일 15:04:05

UnixDate
2006년 1월 2일 월요일 15:04:05 MST

RubyDate
2006년 1월 2일 월요일 15:04:05 -0700

RFC822
2006년 1월 2일 15:04 MST

RFC822Z
06년 1월 2일 15:04 -0700

RFC850
2006년 1월 2일 월요일 15:04:05 MST

RFC1123
2006년 1월 2일 월요일 15:04:05 MST

RFC1123Z
2006년 1월 2일 월요일 15:04:05 -0700

RFC3339
2006-01-02T15:04:05Z07:00

RFC3339나노
2006-01-02T15:04:05.999999999Z07:00

주방
오후 3시 04분

우표
1월_2일 15:04:05

스탬프밀리
1월 _2 15:04:05.000

스탬프마이크로
1월 _2 15:04:05.000000

스탬프나노
1월 _2 15:04:05.000000000


나만의 레이아웃을 만들기 위한 빌딩 블록




유형
옵션


년도
"2006", "06"


"1월", "1월", "1", "01"

텍스트 요일
"월요일", "월요일"

월의 숫자 날짜
"2", "_2", "02"

올해의 숫자 일
"__2", "002"


"15", "3", "03"(오후 또는 오전)


"4", "04"


"5", "05"

오전/오후 마크
"오후"


두 자리 연도 06을 지정하는 레이아웃의 경우 값 NN >= 69는 19NN으로 처리되고 값 NN < 69는 20NN으로 처리됩니다.

숫자 시간대 오프셋 형식은 다음과 같습니다.





체재


"-0700"
±흠

"-07:00"
±hh:mm

"-07"
±hh


형식의 기호를 Z로 바꾸면 UTC 영역에 대한 오프셋 대신 Z를 인쇄하는 ISO 8601 동작이 트리거됩니다. 따라서:



체재


"Z0700"
Z 또는 ±hhmm

"Z07:00"
Z 또는 ±hh:mm

"Z07"
Z 또는 ±hh


최종 예




func main() {
    ipTimes := []string{
        "24 Aug 2021 7:20:50 PM",
        "Aug 24 2021 07:20:50PM",
        "24-08-2021 17:20:50",
        "08-24-2021 13:12:32",
        "24/8/21 9:00:12",
        "8/24/2021 10:10:10",
        "1993-11-23 7**12**44PM",
        "24 October 97 7:12:45PM+05:30", // 24 th January 1997
    }

    layouts := []string{
        "2 Jan 2006 3:04:05 PM",
        "Jan 2 2006 03:04:05PM",
        "2-01-2006 15:04:05",
        "01-02-2006 15:4:5",
        "2/1/06 3:4:5",
        "1/2/2006 3:4:5",
        "2006-01-02 3**4**5PM",
        "2 January 06 3:4:5PMZ07:00",
    }

    for i := 0; i < len(ipTimes); i++ {
        t, err := time.Parse(layouts[i], ipTimes[i]) // parsing to get time value
        if err != nil {                              // check for errors
            fmt.Println(err)
            return
        }

        fmt.Println("    Input DateTime String: ", ipTimes[i])
        fmt.Println("                   Layout: ", layouts[i])
        fmt.Println("Time value Default Format: ", t)
        fmt.Println("   Time in RFC3339 Format: ", t.Format(time.RFC3339))
    }
}



반복하기 위해 그러한 예를 하나 들어 보겠습니다.

입력: "97년 10월 24일 오후 7:12:45+05:30"
레이아웃: "2006년 1월 2일 3:4:5PMZ07:00"

위에 나열된 빌딩 블록에서 사물을 매핑할 수 있습니다.


레이아웃 키
실제 값
설명


2
24
월의 숫자 날짜

1월
십월


06
97
연도 (1997)


7


4
12


5
45


Z07:00
+05:30
오프셋


PM이 지정되어 있으므로 7:12:45는 12시간 형식입니다.

지정된 레이아웃 블록을 사용하여 패턴을 쉽게 볼 수 있고 자체 레이아웃을 만들 수 있습니다.

재미있는 팁



golang playgroundtime.Now()가 같은 시간에 인쇄되는 이유(2009-11-10 23:00:00 +0000 UTC m=+0.000000001)가 궁금한 적이 있습니까?

드럼 롤!!!!!!

고랭이의 생일날짜와 시간입니다.

새로운 것을 배웠거나 개념을 수정했으면 합니다.

내가 뭔가를 놓친 경우 알려주세요.

Complete Working Date Time Example

참조



Time Format
Time Parse
Constants

좋은 웹페이지 즐겨찾기