我需要在不同时区的两个日期之间获得时差。目前我这样做:
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();
我得到0
小时。我做错了什么?
答案 0 :(得分:14)
getTimeInMillis()
返回自UTC时代以来的毫秒数。换句话说,时区与它无关。
我怀疑你真的想要:
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";
答案 1 :(得分:1)
Jon很亲密,但由于角色限制,我无法编辑他的答案。这是相同的代码,但东部标准时间的“EDT”更改为“EST”。
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";
但是这个解决方案假设TimeZone.getAvailableIDs()在其字符串数组中包含“EST”和“GMT”。如果该方法不包含那些时区字符串,它将返回0偏移量。
答案 2 :(得分:0)
这是我的代码二计算两个不同时区之间的时差。 比如当前时区(GMT+05:00)和国外时区(GMT+05:30)。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
LocalDate today = LocalDate.now();
Duration timeDifference = Duration.between(today.atStartOfDay(ZoneId.of(foreigntimezone)), today.atStartOfDay(ZoneId.of(currenttimezone)));
holder.textViewTimeDifference.setText(timeDifference.toString());
} else {
long now = System.currentTimeMillis();
long diffMilliSeconds = TimeZone.getTimeZone(gmtReplaceUTC).getOffset(now) - TimeZone.getTimeZone(currentTimeZone).getOffset(now);
if (diffMilliSeconds > 0) {
String timeDifference = formatTime(diffMilliSeconds);
holder.textViewTimeDifference.setText(timeDifference);
} else {
String timeDifference = formatTime(-diffMilliSeconds);
holder.textViewTimeDifference.setText("-" + timeDifference);
}
}
}
结果: 26 API 级别以上 (PT+30M) 及以下 (30:00)