2013-05-11 124 views
-1


在Android窗體中,我接受來自用戶的GMT值(偏移量),例如+5:30,+3:00。
從這個值,我想要計算出「印度/德里」的時區。從GMT值計算時區 - Android

就怎麼做吧...... Plzz

+3

您必須搜索時區以查找匹配(顯然,可能有多個匹配) – 2013-05-11 07:45:03

+0

您甚至知道發生偏移的日期/時間嗎?這會至少縮小一點... – 2013-05-11 07:56:17

回答

4

如果您已經在某一特定時刻着該偏移是有效的,你可以做這樣的事情:

import java.util.*; 

public class Test { 

    public static void main(String [] args) throws Exception { 
     // Five and a half hours 
     int offsetMilliseconds = (5 * 60 + 30) * 60 * 1000; 
     for (String id : findTimeZones(System.currentTimeMillis(), 
             offsetMilliseconds)) { 
      System.out.println(id); 
     } 
    } 

    public static List<String> findTimeZones(long instant, 
              int offsetMilliseconds) { 
     List<String> ret = new ArrayList<String>(); 
     for (String id : TimeZone.getAvailableIDs()) { 
      TimeZone zone = TimeZone.getTimeZone(id); 
      if (zone.getOffset(instant) == offsetMilliseconds) { 
       ret.add(id); 
      } 
     } 
     return ret; 
    } 
} 

在我的盒子,打印:

Asia/Calcutta 
Asia/Colombo 
Asia/Kolkata 
IST 

(據因爲我知道,印度/德里不是有效的zoneinfo ID。)

如果您不知道偏移量有效的時刻,這變得相當困難真的做得不錯。這裏有一個版本:

public static List<String> findTimeZones(int offsetMilliseconds) { 
    List<String> ret = new ArrayList<String>(); 
    for (String id : TimeZone.getAvailableIDs()) { 
     TimeZone zone = TimeZone.getTimeZone(id); 
     if (zone.getRawOffset() == offsetMilliseconds || 
      zone.getRawOffset() + zone.getDSTSavings() == offsetMilliseconds) { 
      ret.add(id); 
     } 
    } 
    return ret; 
} 

...但是,假設有每個時區只有永遠兩個偏移的時候,其實時區可以在歷史相當大的變化。當然,它也爲您提供更廣泛的ID。例如,一個小時的偏差包括歐洲/倫敦和歐洲/巴黎,因爲在夏季,倫敦在UTC + 1,而在冬季,巴黎在UTC + 1。

+0

+1不錯的答案。我可以得到ID,但不知道你必須以毫秒爲單位匹配 – Raghunandan 2013-05-11 08:14:53

+0

@Raghunandan:「毫秒匹配」是什麼意思?這只是'getOffset'返回一個值的單位... – 2013-05-11 08:23:19

+0

我錯過了這個(zone.getOffset(instant)== offsetMilliseconds)部分就是我的意思。 – Raghunandan 2013-05-11 08:25:44

-1

如果我有正確的解釋,然後你的問題試試這個任何想法,

final SimpleDateFormat date= 
     new SimpleDateFormat("EEE, MMM d, yyyy hh:mm:ss a z"); 
date.setTimeZone(TimeZone.getTimeZone("GMT")); 
System.out.println("GMT time: " + date.format(currentTime)); 

在此你可以添加你所抵消。看看這是否有助於你。

+0

不,這個問題根本不能回答這個問題。 OP不是在談論文本格式;他正在談論時區檢測。 – 2013-05-11 07:56:42