3

私はまだこれに対する直接的なアプローチを見つけていません。私はたくさんの異なる例を見てきました.いくつかは実際に互いに衝突し、他のものは非推奨の呼び出しを使用しています.なぜこれが確かな答えを見つけるのが難しいのか分かりません.

したがって、次の形式の Web サービスからタイムスタンプが返されます。

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

*タイムゾーンはタイムスタンプの一部ではありませんが、時間は東部時間です。

私が知りたいのは、Web サービスのタイム スタンプ (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();
}

...時差が正確ではないため、タイムゾーンの変換に問題があります。どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1