2011-09-02 24 views
15

Tôi đang cố gắng lấy giá trị UTC tính bằng giây trong android. Vì bộ mô phỏng tiếp tục trả về 0, tôi không thể biết liệu tôi có đang làm điều này đúng hay không.Cách lấy bù trừ UTC trong vài giây trong android

Calendar c=Calendar.getInstance(); 
     TimeZone tz=c.getTimeZone(); 
     int offsetFromUtc=tz.getOffset(0)/1000; 

Khi tôi đặt 0 vào tz.getKhông có nghĩa là tôi chỉ muốn số giây từ gmt. Hãy cho tôi biết nếu những gì Im đang làm là chính xác. Cảm ơn

Trả lời

42

Khoảng thời gian bù giờ có thể thay đổi trong năm, có lẽ lý do phổ biến nhất là Giờ tiết kiệm ánh sáng ban ngày. Thay vì đi qua 0-TimeZone.getOffset() sử dụng thời gian hiện tại để có được hiện tại bù đắp, tạo một ngày mới và nhận được giá trị của nó Thời gian:

TimeZone tz = TimeZone.getDefault(); 
Date now = new Date(); 
int offsetFromUtc = tz.getOffset(now.getTime())/1000; 

Các giá trị mặc định giả lập để UTC, hãy thử kiểm tra các múi giờ có sẵn để kiểm tra. Ngoài ra, bạn có thể chuyển đổi múi giờ để đặt múi giờ, check the documentation cho múi giờ.

+0

Tôi quên tiết kiệm ánh sáng ban ngày, cảm ơn những người đứng đầu lên –

+0

Điều này không thực sự hoàn tất. Không phải tất cả các múi giờ đều là vòng giờ, có các múi giờ phân đoạn như -4,5 cho Venezuela. Đây phải là một float/double không phải là int. – Dev2rights

+2

[getOffset] (http://developer.android.com/reference/java/util/TimeZone.html#getOffset (long)) trả về int với nhiều độ chính xác cho các múi giờ phân đoạn, xuống đến giây thứ hai. –

4

Múi giờ mặc định của trình giả lập là GMT, có nghĩa là bạn sẽ luôn nhận được khoản chênh lệch là 0, Mã của bạn có vẻ tốt (tôi không thử). Hãy thử thay đổi múi giờ của trình giả lập của bạn thành một thứ khác và kiểm tra mã của bạn. Hãy xem bài đăng mở này: Link

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