我需要获取不同时区的两个日期之间的时差。目前我正在这样做:
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();
I get 0
小时。我究竟做错了什么?
getTimeInMillis()
返回毫秒数自 UTC 纪元以来。换句话说,时区与它无关。
我怀疑你实际上想要:
long currentTime = System.currentTimeMillis();
int edtOffset = TimeZone.getTimeZone(srcZoneId).getOffset(currentTime);
int gmtOffset = TimeZone.getTimeZone(targetZoneId).getOffset(currentTime);
int hourDifference = (gmtOffset - edtOffset) / (1000 * 60 * 60);
String diff = hourDifference + " hours";
... 在哪里srcZoneId
and targetZoneId
are valid时区 ID。请注意,“EDT”不是时区 ID;这充其量只是“半个时区”。我会strongly建议避免使用 3 个字母的缩写,它们实际上并不标识时区。例如,使用“America/New_York”和“Europe/London”即可。
当然,虽然上述方法在 2011 年是一个合理的方法,但如果您使用的是 Java 8 或更高版本确实值得在 java.time 中使用类java.util.Calendar
, java.util.TimeZone
etc.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)