Go 언어로 Unix 타임 스탬프 얻기 (기원 이후 현재 시간 (초))


84

최신 주간 빌드로 작업하도록 업데이트하려는 Go로 작성된 코드가 있습니다. (마지막으로 r60에서 지어졌습니다). 이제 다음 비트를 제외하고 모든 것이 작동합니다.

 if t, _, err := os.Time(); err == nil {
   port[5] = int32(t)
 }

현재 Go 구현에서 작동하도록 업데이트하는 방법에 대한 조언이 있습니까?

답변:


166
import "time"
...
port[5] = int32(time.Now().Unix())

41
ALERT : Unix()반환 값은 유형 int64입니다. 입력 할 유형 int64값을 자르는 것은 2038 년 문제int32 의 예입니다 .
peterSO

1
go1.9.2 darwin / amd64는 일관되게 반환합니다 : 1969-12-31 19:00:00, 이는 대략 time.Unix (0, 0)와 같습니다. 이것은 잘리지 않습니다.
Breedly

31

원하는 경우 다음 string을 통해 변환하십시오 strconv.

package main

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

func main() {
    timestamp := strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
    fmt.Println(timestamp) // prints: 1436773875771421417
}

이것의 요점은 무엇입니까? 누군가 숫자를 문자열로 변환하려는 경우이를 수행하는 방법을 찾을 수 있습니다. 아니면 다른 대답을 추가해야 할 수도 있습니다. bytearray로 변환하려면 [] byte (...)를 수행하십시오.
Salvador Dali

11
@SalvadorDali 사실 이것은 정확히 내가 필요한 것입니다. 원하는 경우 답변을 추가하여 바이트 배열로 변환하십시오. 결국 누군가가 와서 코드가 필요할 것이라고 확신합니다.
anon58192932

3
time.Now (). UTC (). UnixNano ()는 time.Now (). UnixNano ()로 대체 될 수 있습니다-문서는 결과가 t와 관련된 위치에 의존하지 않는다고 말합니다.
Abu Junayd

16

또 다른 팁. time.Now().UnixNano()(godoc) 은 시대 이후로 나노초를 제공합니다. 엄밀히 말하자면 유닉스 시간은 아니지만 동일한 시대를 사용하여 초 미만의 정밀도를 제공하므로 편리 할 수 ​​있습니다.

편집 : 현재 golang api와 일치하도록 변경


1
내가 오래된 스레드를 부활시키고 있다는 것을 알고 있지만 궁금한 점은 ... Python이 다른 플랫폼에서 정확한 시간을 얻는 데 따르는 문제를 명확하게 문서화하고 있습니다. docs.python.org/2/library/time.html을 참조 하고 "precision"을 검색 하십시오 . 요점은 모든 소수가 중요하다는 것은 float64를 가지고 있기 때문이 아닙니다. Go의 시간은 어떻게 구현되며이 나노초 정밀도를 얼마나 믿을 수 있습니까?
Niriel

5
여기서는 작동하지 않지만 time.Now().UnixNano()( 참조 ) 작동합니다.
Jo Liss 2013

0

여기에 다른 답변의 아이디어를 바탕으로 사람이 읽을 수있는 해석을 얻으려면 다음을 사용할 수 있습니다.

package main

import (
    "fmt"
    "time"
)

func main() {
    timestamp := time.Unix(time.Now().Unix(), 0)
    fmt.Printf("%v", timestamp) // prints: 2009-11-10 23:00:00 +0000 UTC
}

Go Playground 에서 시도해보십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.