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


126

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

package main

import "fmt"
import "time"

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

    fmt.Println(tm)
}

운동장

답변:


239

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를 방지하기 위해 에서 로 변경되었습니다 .


1
문서에 그러한 참조가없는 이유를 아십니까? 그들은 심지어 레이아웃 예제로 유닉스 타임 탭 레이아웃을 제공합니다.
안녕

유닉스 타임 스탬프는 텍스트 표현이 아니라 시간의 정수 표현이므로 구문 분석이 필요하지 않기 때문이라고 생각합니다. 방금 정수 값의 문자열 표현이 있습니다. 그리고 문서에서 1136239445에 대한 언급은 레이아웃으로 사용되는 것이 아니라 참조 시간으로 사용되는 정확한 타임 스탬프를 명확히하기위한 것일 수 있습니다.
ANisus

4
strconv.ParseUint어쨌든 음수는 의미가 없으므로 대신 사용하는 것이 더 낫지 않습니까?
Atmocreations

6
@Atmocreations : 값을 func Unix(sec int64, nsec int64) Time받습니다 int64. 또한 sec에 대한 음수는 완벽한 의미가 있습니다. 1970 년 이전의 날짜를 나타냅니다! :)의 nsec경우 음수 값은 초에서 많은 나노초를 제거하는 것을 의미합니다.
ANisus

1
날짜와 시간 만 "2014-07-16 20:55:46"로 설정하고 싶습니다. 어떻게 이룰 수 있습니까?
karthik

14

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


4

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

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")
}

제거하면 .In(loc)나에게 시간을 주었다 -0400 EDT. 그것을 대체하면 .In(time.UTC)UTC로 시간 이 주어졌습니다.
NatoBoram

3

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

0

타임 스탬프가 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)
}

-6

시간을 사용 하십시오.

예:

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의 작업 예제 .


2
질문은 유닉스 타임 스탬프를 지정합니다. 이 답변은 그 측면을 다루지 않습니다.
t3h2mas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.