2012-03-02 34 views
43

Tôi có một số mã được viết bằng Go mà tôi đang cố gắng cập nhật để làm việc với các bản dựng hàng tuần mới nhất. (Nó được xây dựng lần cuối dưới r60). Mọi thứ hiện đang hoạt động ngoại trừ các bit sau:Lấy Dấu thời gian của Unix trong Ngôn ngữ Go (thời gian hiện tại tính bằng giây),

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

Bất kỳ lời khuyên nào về cách cập nhật để làm việc với triển khai Go hiện tại?

Trả lời

94
import "time" 
... 
port[5] = int32(time.Now().Unix()) 
+0

:) tốt đẹp mà giải quyết vấn đề của tôi – pregmatch

+3

ALERT: Lệnh 'Unix()' giá trị trả về là kiểu 'int64'. Việc cắt bớt giá trị 'int64' để nhập' int32' là một ví dụ về [vấn đề năm 2038] (https://en.wikipedia.org/wiki/Year_2038_problem). – peterSO

+0

go1.9.2 darwin/amd64 giá trị này luôn trả về: 1969-12-31 19:00:00, tương đương với: time.Unix (0, 0). Điều này là không cắt xén. – Breedly

8

Một mẹo khác. time.Now().UnixNano()(godoc) sẽ cung cấp cho bạn nano giây kể từ kỷ nguyên. Nó không hoàn toàn là thời gian của Unix, nhưng nó cung cấp cho bạn độ chính xác phụ thứ hai bằng cách sử dụng cùng một kỷ nguyên, có thể có ích.

Chỉnh sửa: Thay đổi để phù hợp với golang hiện api

+0

Tôi biết tôi đang hồi sinh một chuỗi cũ, nhưng tôi tự hỏi ... Python rõ ràng đang ghi lại các vấn đề mà nó gặp phải khi nhận được thời gian chính xác trên các nền tảng khác nhau. Xem http://docs.python.org/2/library/time.html và tìm kiếm "độ chính xác". Vấn đề là: không phải vì bạn có float64 mà tất cả các số thập phân đều quan trọng. Thời gian của Go được thực hiện như thế nào, tôi có thể tin tưởng độ chính xác nano giây này bao nhiêu? – Niriel

+4

Điều đó không hoạt động ở đây, nhưng 'time.Now(). UnixNano()' ([tham khảo] (http://golang.org/pkg/time/#Time.UnixNano)). –

+1

Tôi tin rằng đây là trước khi phiên bản 1.0 được phát hành và API đã thay đổi ... – Nate

9

Nếu bạn muốn nó như string chỉ chuyển nó qua strconv:

package main 

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

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

Điểm này là gì? Nếu ai đó muốn chuyển đổi một số thành chuỗi, anh ta có thể tìm cách thực hiện điều này. Hoặc có thể tôi chỉ nên thêm một câu trả lời: nếu bạn muốn chuyển đổi nó thành một bytearray, chỉ cần làm [] byte (...)? –

+4

@SalvadorDali Thực ra đây chính xác là những gì tôi cần. Hãy tiếp tục và thêm câu trả lời của bạn để chuyển đổi nó thành một mảng byte nếu bạn muốn tôi chắc chắn rằng ai đó sẽ đến cùng và cần mã. – anon58192932

Các vấn đề liên quan