[go] 유닉스 타임 스탬프를 time.Time으로 구문 분석하는 방법

Unix 타임 스탬프 를 구문 분석하려고하는데 범위를 벗어났습니다. 레이아웃이 정확하기 때문에 (Go 문서에서와 같이) 실제로 의미가 없습니다.

package main

import "fmt"
import "time"

func main() {
    tm, err := time.Parse("1136239445", "1405544146")
    if err != nil{
        panic(err)
    }

    fmt.Println(tm)
}

운동장



답변

time.Parse함수는 Unix 타임 스탬프를 수행하지 않습니다. 대신 다음을 사용 strconv.ParseInt하여 문자열을 구문 분석 int64하고 타임 스탬프를 만들 수 있습니다 time.Unix.

package main

import (
    "fmt"
    "time"
    "strconv"
)

func main() {
    i, err := strconv.ParseInt("1405544146", 10, 64)
    if err != nil {
        panic(err)
    }
    tm := time.Unix(i, 0)
    fmt.Println(tm)
}

산출:

2014-07-16 20:55:46 +0000 UTC

플레이 그라운드 : http://play.golang.org/p/v_j6UIro7a

편집하다:

32 비트 시스템에서 int 오버플 strconv.Atoistrconv.ParseInt를 방지하기 위해 에서 로 변경되었습니다 .


답변

time.Unix 타임 스탬프를 UTC로 변환하는 시간의 Unix 기능

package main

import (
  "fmt"
  "time"
)


func main() {
    unixTimeUTC:=time.Unix(1405544146, 0) //gives unix time stamp in utc 

    unitTimeInRFC3339 :=unixTimeUTC.Format(time.RFC3339) // converts utc time to RFC3339 format

    fmt.Println("unix time stamp in UTC :--->",unixTimeUTC)
    fmt.Println("unix time stamp in unitTimeInRFC3339 format :->",unitTimeInRFC3339)
}

산출

unix time stamp in UTC :---> 2014-07-16 20:55:46 +0000 UTC
unix time stamp in unitTimeInRFC3339 format :----> 2014-07-16T20:55:46Z

Go Playground에서 확인 : https://play.golang.org/p/5FtRdnkxAd


답변

날짜에 대해 만든 몇 가지 기능 공유 :

UTC 시간뿐만 아니라 특정 위치에 대한 시간을 얻고 싶었습니다. UTC 시간을 원하면 loc 변수와 .In (loc) 함수 호출을 제거하십시오.

func GetTimeStamp() string {
     loc, _ := time.LoadLocation("America/Los_Angeles")
     t := time.Now().In(loc)
     return t.Format("20060102150405")
}
func GetTodaysDate() string {
    loc, _ := time.LoadLocation("America/Los_Angeles")
    current_time := time.Now().In(loc)
    return current_time.Format("2006-01-02")
}

func GetTodaysDateTime() string {
    loc, _ := time.LoadLocation("America/Los_Angeles")
    current_time := time.Now().In(loc)
    return current_time.Format("2006-01-02 15:04:05")
}

func GetTodaysDateTimeFormatted() string {
    loc, _ := time.LoadLocation("America/Los_Angeles")
    current_time := time.Now().In(loc)
    return current_time.Format("Jan 2, 2006 at 3:04 PM")
}

func GetTimeStampFromDate(dtformat string) string {
    form := "Jan 2, 2006 at 3:04 PM"
    t2, _ := time.Parse(form, dtformat)
    return t2.Format("20060102150405")
}


답변

go 문서 에 따르면 Unix는 현지 시간을 반환합니다.

Unix는 주어진 Unix 시간에 해당하는 현지 시간을 반환합니다.

즉, 출력은 코드가 실행되는 컴퓨터에 따라 달라지며, 가장 자주 필요한 것이지만 때로는 UTC 값을 원할 수 있습니다.

이를 위해 UTC로 시간을 반환 하도록 코드 조각 을 조정했습니다 .

i, err := strconv.ParseInt("1405544146", 10, 64)
if err != nil {
    panic(err)
}
tm := time.Unix(i, 0)
fmt.Println(tm.UTC())

내 컴퓨터에서 인쇄됩니다 (CEST).

2014-07-16 20:55:46 +0000 UTC


답변

타임 스탬프가 float64 인 경우 많은 로깅을 수행하고이 함수를 사용하여 타임 스탬프를 문자열로 가져옵니다.

func dateFormat(layout string, d float64) string{
    intTime := int64(d)
    t := time.Unix(intTime, 0)
    if layout == "" {
        layout = "2006-01-02 15:04:05"
    }
    return t.Format(layout)
}


답변

시간을 사용 하십시오.

예:

package main

import (
    "fmt"
    "time"
)

func main() {
    fromString := "Wed, 6 Sep 2017 10:43:01 +0300"
    t, e := time.Parse("Mon, _2 Jan 2006 15:04:05 -0700", fromString)
    if e != nil {
        fmt.Printf("err: %s\n", e)
    }
    fmt.Printf("UTC time: %v\n", t.UTC())
}

play.golang.org의 작업 예제 .


답변