我有日期解析问题。在我的应用程序中,我从服务器检索新的评论。检索到的纪元长时间戳是正确的,但是当我尝试将它们保存到sqlite db时,有时最后的注释会错误地解析日期。
的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")))
首先返回一个更正的解析时间和一行,它进一步解析另一个错误的时间?或者为什么getCreation_time()有时会返回错误解析的日期?
编辑: 评论只有getter ans setters
public Date getCreation_time() {
return creation_time;
}
public void setCreation_time(Date creationTime) {
this.creation_time = creationTime;
}
答案 0 :(得分:3)
因此,解析2次完全相同的String
有时会产生不同的结果?我能想到的唯一原因是SimpleDateFormat
is not threadsafe。
它经常发生吗?如果使用变量而不是实例字段会发生什么?
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) {}