在Android窗體中,我接受來自用戶的GMT值(偏移量),例如+5:30,+3:00。
從這個值,我想要計算出「印度/德里」的時區。從GMT值計算時區 - Android
就怎麼做吧...... Plzz
在Android窗體中,我接受來自用戶的GMT值(偏移量),例如+5:30,+3:00。
從這個值,我想要計算出「印度/德里」的時區。從GMT值計算時區 - Android
就怎麼做吧...... Plzz
如果您已經在某一特定時刻着該偏移是有效的,你可以做這樣的事情:
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。
+1不錯的答案。我可以得到ID,但不知道你必須以毫秒爲單位匹配 – Raghunandan 2013-05-11 08:14:53
@Raghunandan:「毫秒匹配」是什麼意思?這只是'getOffset'返回一個值的單位... – 2013-05-11 08:23:19
我錯過了這個(zone.getOffset(instant)== offsetMilliseconds)部分就是我的意思。 – Raghunandan 2013-05-11 08:25:44
如果我有正確的解釋,然後你的問題試試這個任何想法,
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));
在此你可以添加你所抵消。看看這是否有助於你。
不,這個問題根本不能回答這個問題。 OP不是在談論文本格式;他正在談論時區檢測。 – 2013-05-11 07:56:42
您必須搜索時區以查找匹配(顯然,可能有多個匹配) – 2013-05-11 07:45:03
您甚至知道發生偏移的日期/時間嗎?這會至少縮小一點... – 2013-05-11 07:56:17