3

日付の解析に問題があります。私のアプリでは、サーバーから新しいコメントを取得します。取得したエポックの長いタイムスタンプは正しいですが、それらを sqlite データベースに保存しようとすると、最後のコメントが日付を間違って解析することがあります。

SimpleDateFormat:

this.dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
this.dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 

解析:

Log.v("GET COMMENT TIME A", ""+cu.getString(cu.getColumnIndex("creation_time")));
try {
    Log.v("GET COMMENT TIME B",""+dateFormat.parse(cu.getString(cu.getColumnIndex("creation_time"))));
    c.setCreation_time(dateFormat.parse(cu.getString(cu.getColumnIndex("creation_time"))));
    Log.v("GET COMMENT TIME C", ""+c.getCreation_time());
} catch (ParseException e) {}

Logcat: 以前のコメントは良好に解析されました

01-13 13:01:58.009: V/GET COMMENT TIME A(10536): 2013-01-13 12:01:37
01-13 13:01:58.017: V/GET COMMENT TIME B(10536): Sun Jan 13 13:01:37 CET 2013
01-13 13:01:58.017: V/GET COMMENT TIME C(10536): Sun Jan 13 13:01:37 CET 2013

Logcat: 最後のコメントが間違って解析されました:

01-13 13:01:58.064: V/GET COMMENT TIME A(10536): 2013-01-13 12:01:41
01-13 13:01:58.064: V/GET COMMENT TIME B(10536): Sun Jan 13 13:01:41 CET 2013
01-13 13:01:58.064: V/GET COMMENT TIME C(10536): Tue Jan 01 13:01:41 CET 2013

logcat GET COMMENT TIME B と C を見ると、

dateFormat.parse(cu.getString(cu.getColumnIndex("creation_time")))

最初に修正された解析された時間を返し、さらに1行で別の間違った時間を解析しますか? または、getCreation_time() が誤って解析された日付を返すことがあるのはなぜですか?

編集:コメントにはゲッターとセッターしかありません

public Date getCreation_time() {
    return creation_time;
}

public void setCreation_time(Date creationTime) {
    this.creation_time = creationTime;
}
4

1 に答える 1

3

それで、まったく同じものを2回解析すると、String異なる結果が得られることがありますか?私が考えることができる唯一の理由は、SimpleDateFormat がスレッドセーフではないということです。
頻繁ですか?インスタンスフィールドの代わりに変数を使用するとどうなりますか?

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
Log.v("GET COMMENT TIME A", ""+cu.getString(cu.getColumnIndex("creation_time")));
try {
    Log.v("GET COMMENT TIME B",""+dateFormat.parse(cu.getString(cu.getColumnIndex("creation_time"))));
    c.setCreation_time(dateFormat.parse(cu.getString(cu.getColumnIndex("creation_time"))));
    Log.v("GET COMMENT TIME C", ""+c.getCreation_time());
} catch (ParseException e) {}
于 2013-01-16T15:24:12.463 に答える