在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