0

でタイム ゾーンの問題が発生していSimpleDateFormatます。これが私のコードです:

TextView date_time = (TextView) view.findViewById(R.id.date_time);
SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.US);
Date date = null;
try {
    date = df.parse(workout.getDate().toString());
    System.err.println("position: " + position + " workout: " + workout.getDate().toString());
    System.err.println("position: " + position + " date: " + date);
} catch (ParseException e) {
    e.printStackTrace();
}
df = new SimpleDateFormat("EEEE, MMMMM dd", Locale.US);
date_time.setText(df.format(date));

この出力に注意してください。

position: 0 workout: Mon Aug 19 00:00:00 MDT 2013
position: 0 date: Sun Aug 18 23:00:00 MDT 2013

文字列が 8 月 19 日 (午前 0 時) の日付で (正しく) 始まるのがわかりますか? しかし、日付フォーマッタが機能した後、1 時間前の時刻が表示されます。これはタイムゾーンの操作であると想定していますが、修正方法がわかりません。「Z」にいくつかの異なる値 (「Z」、「ZZZ」、「ZZZZ」、および「ZZZZZ」を含む) を試しましたが、すべて同じ結果になります。タイムゾーンの問題だと思いますが、どちらの場合も「MDT」が表示されるので、そうではないかもしれません。

この1時間のシフトが起こらないようにするにはどうすればよいですか? ありがとう!

編集:非常にハックなソリューションですが、機能します:

try {
    date = df.parse(workout.getDate().toString());
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.add(Calendar.HOUR_OF_DAY, 1);
    date = cal.getTime();
} catch (ParseException e) {
    e.printStackTrace();
}
4

0 に答える 0