我在Android中使用SimpleDateFormat
方法遇到了一个奇怪的问题。有时(很少)format
方法返回错误的格式化日期。这是代码,在输出下面。你能解释一下这个0的原因吗?
以下是代码:
public class MyObject{
protected Timestamp detectionDate;
public String getDetectionDateAsString() {
String dateAsString = Constant.ISO_8601_TS_DF.format(detectionDate);
if(dateAsString.length()>19){
logger.warn("ERROR ON FORMAT DATE");
logger.warn("dateAsString:" + dateAsString);
logger.warn("detectionDate:" + detectionDate);
}
}
}
public class Constant {
public static final SimpleDateFormat ISO_8601_TS_DF =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
输出:
14:35:05.150 [AsyncTask #2] WARN i.m.t.d.o.OutcomesTableData - ERROR ON FORMAT DATE
14:35:05.150 [AsyncTask #2] WARN i.m.t.d.o.OutcomesTableData - dateAsString:2016-0007-0001 0000:00:0000
14:35:05.151 [AsyncTask #2] WARN i.m.t.d.o.OutcomesTableData - detectionDate:2016-07-03 12:34:27.194
谢谢
答案 0 :(得分:2)
虽然根据docs,Timestamp
是Date
的扩展名:
Timestamp和java.util.Date之间的继承关系实际上表示实现继承,不类型继承。
要解决您的问题,您可以尝试使用Calendar
代替:
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(timestamp.getTime());
String format = dateFormat.format(cal.getTime());
答案 1 :(得分:0)
TimeStamp
类已经返回指定格式的字符串(查看TIME_FORMAT_REGEX
类中的字段TimeStamp
),因此调用toString()
方法将返回字符串你想要的格式。