Android, как получить разницу во времени между двумя часовыми поясами в Android? - PullRequest
8 голосов
/ 20 июля 2011

Мне нужно получить разницу во времени между двумя датами в разных часовых поясах.В настоящее время я делаю это:

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 часов.Что я делаю не так?

Ответы [ 2 ]

14 голосов
/ 20 июля 2011

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 голос
/ 23 января 2013

Джон близко, но из-за ограничений персонажа я не могу редактировать его ответ.Это тот же код, но с «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 ".Если этот метод не содержит эти строки часового пояса, он вернется с нулевым смещением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...