2015-01-16 35 views
25

Tôi cần có thời gian hiện tại ở các múi giờ khác nhau.Làm thế nào để có được dấu thời gian hiện tại trong các múi giờ khác ở Golang?

Hiện nay tôi biết rằng chúng tôi có thể làm như sau:

t := time.Now() 
fmt.Println("Location:", t.Location(), ":Time:", t) 
utc, err := time.LoadLocation("America/New_York") 
if err != nil { 
    fmt.Println("err: ", err.Error()) 
} 
fmt.Println("Location:", utc, ":Time:", t.In(utc)) 

Tên LoadLocation được thực hiện để trở thành một tên vị trí tương ứng với một tập tin trong cơ sở dữ liệu IANA Time Zone, chẳng hạn như "America/New_York".

Có cách nào đơn giản hơn để có được thời gian hiện tại không, nếu tên quốc gia hoặc bù trừ GMT được đưa ra, ví dụ: +530 cho Ấn Độ?

Chỉnh sửa: Tôi cũng muốn hỗ trợ tiết kiệm ánh sáng ban ngày.

+1

Trong khi có một số trường hợp bằng cách sử dụng một cố định bù đắp được thích hợp, nói chung nó tốt hơn để gõ 'Continent/City'. Các múi giờ và quy tắc tiết kiệm ánh sáng ban ngày là chính trị và thay đổi. Sử dụng 'Continent/City' sẽ cho phép ứng dụng của bạn điều chỉnh các thay đổi đó khi cơ sở dữ liệu Vùng thời gian IANA cơ bản được cập nhật. Nó cũng sẽ chăm sóc tiết kiệm ban ngày cho bạn. – Schwern

Trả lời

10

Không, đó là cách tốt nhất. Bạn có thể tạo tùy chỉnh Location bằng cách sử dụng FixedZone và sử dụng vị trí tùy chỉnh đó.

FixedZone trả về vị trí luôn sử dụng tên khu vực nhất định và offset (giây về phía đông của UTC).

+3

Cảm ơn Fabrizio! Tôi cũng muốn hỗ trợ tiết kiệm ánh sáng ban ngày. Bất kỳ con trỏ về điều đó? –

+1

Tôi không biết về việc xác định cài đặt tiết kiệm ánh sáng ban ngày, nhưng Múi giờ từ cơ sở dữ liệu đã hỗ trợ tiết kiệm ánh sáng ban ngày. – MffnMn

13
//init the loc 
loc, _ := time.LoadLocation("Asia/Shanghai") 

//set timezone, 
now := time.Now().In(loc) 
+2

Tôi giả sử bạn có nghĩa là hiện tại: = time.Now(). –

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