Android: конвертируйте 2 разных часовых пояса в UTC и вычисляйте их разницу в днях, часах и минутах - PullRequest
3 голосов
/ 01 декабря 2011

Мне еще предстоит найти прямой подход к этому. Я видел множество разных примеров, некоторые на самом деле конфликтуют друг с другом, другие используют устаревшие вызовы, я не уверен, почему так сложно найти надежный ответ.

Итак, у меня есть метка времени, возвращенная веб-службой в следующем формате:

"yyyy-MM-dd hh:mm:ss"

* Время указано по восточному времени, хотя часовой пояс не является частью их отметки времени.

Все, что я хочу знать, - это лучший способ рассчитать разницу во времени между отметкой времени веб-службы (EST) и отметкой текущего времени используемого телефона, которая может быть в любом часовом поясе. Затем отобразите эту разницу в виде обратного отсчета в оставшиеся дни, оставшиеся часы и оставшиеся минуты.

В настоящее время я делаю что-то вроде этого:

public String getTimeLeft(String date) {
  StringBuilder dateString = new StringBuilder();
  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  formatter.setTimeZone(TimeZone.getTimeZone("EST"));
  Date dateObj = formatter.parse(date);

  Time time = new Time(Time.getCurrentTimezone());
  time.set(dateObj.getTime());
  time.timezone = Time.TIMEZONE_UTC;
  long timeInMill = time.normalize(true);
  endCal.setTimeInMillis(timeInMill);

  currCal.setTime(new Date());

  long timeDiff = endCal.getTimeInMillis() - currCal.getTimeInMillis();
  int days = (int) (timeDiff / (1000*60));
  int hours  = (int) ((timeDiff / (1000*60*60))%24);
  int minutes = (int) ((timeDiff % (1000*60*60)) / (1000*60));

  dateString.append(days + (days == 1 ? " DAY " : " DAYS "));
  dateString.append(hours + (hours == 1 ? " HOUR " : " HOURS "));
  dateString.append(minutes + (minutes == 1 ? " MINUTE " : " MINUTES "));

  return dateString.toString();
}

... и что-то не так с преобразованиями часовых поясов, поскольку разница во времени не точна. Буду признателен за любую оказанную помощь. Заранее спасибо.

1 Ответ

0 голосов
/ 25 августа 2014

Если вы можете получить часовой пояс устройства, рассмотрите возможность отправки времени эпох от вашего веб-сервиса так, чтобы эпоха (не в миллисекундах) + - (разница часовых поясов в секундах) теперь вы могли вычислить разницу epochlongvalue-(System.currentTimeMillis()/1000) Вы можете преобразовать это значение в чч: мм: сс Преобразовать значение секунд в часы, минуты, секунды?

...