2011-07-20 2 views
7

Tôi cần có sự khác biệt về thời gian giữa hai ngày ở các múi giờ khác nhau. Hiện tại tôi đang thực hiện việc này:Android làm thế nào để có được sự khác biệt thời gian giữa hai múi giờ trong android?

Calendar c1=Calendar.getInstance(TimeZone.getTimeZone("EDT")); 
Calendar c2=Calendar.getInstance(TimeZone.getTimeZone("GMT")); 
String diff=((c2.getTimeInMillis()-c1.getTimeInMillis())/(1000*60*60))+" hours"; 
new AlertDialog.Builder(this).setMessage(diff).create().show(); 

Tôi nhận được 0 giờ. Tôi đang làm gì sai?

Trả lời

11

getTimeInMillis() trả về số mili giây từ kỷ nguyên tại UTC. Nói cách khác, múi giờ không liên quan đến nó.

tôi nghi ngờ bạn thực sự muốn:

long currentTime = System.currentTimeMillis(); 
int edtOffset = TimeZone.getTimeZone("EDT").getOffset(currentTime); 
int gmtOffset = TimeZone.getTimeZone("GMT").getOffset(currentTime); 
int hourDifference = (gmtOffset - edtOffset)/(1000 * 60 * 60); 
String diff = hourDifference + " hours"; 
+0

Và điều gì trong trường hợp Tiết kiệm ánh sáng ban ngày? sẽ xử lý nó? – Gugan

+1

@Gugan: Tôi không biết điều gì sẽ xảy ra nếu bạn sử dụng tên viết tắt cho tên múi giờ - nhưng nếu bạn cung cấp cho nó một ID múi giờ đầy đủ, chẳng hạn như 'Europe/London', điều đó thực sự sẽ giúp tiết kiệm ánh sáng ban ngày. –

+0

Cảm ơn bạn Jon. Tôi sẽ kiểm tra. – Gugan

0

Jon gần, nhưng do hạn chế nhân vật tôi không thể chỉnh sửa câu trả lời của mình. Đây là mã tương tự nhưng với "EDT" đã thay đổi thành "EST" cho Giờ chuẩn miền Đông.

long currentTime = System.currentTimeMillis(); 
int edtOffset = TimeZone.getTimeZone("EST").getOffset(currentTime); 
int gmtOffset = TimeZone.getTimeZone("GMT").getOffset(currentTime); 
int hourDifference = (gmtOffset - edtOffset)/(1000 * 60 * 60); 
String diff = hourDifference + " hours"; 

Nhưng giải pháp này giả định rằng TimeZone.getAvailableIDs() có trong chuỗi chuỗi là "EST" và "GMT". Nếu phương thức đó không chứa các chuỗi múi giờ đó, nó sẽ trở lại là 0 offset.