Android SimpleDateFormat发疯了

时间:2016-07-05 08:33:15

标签: java android simpledateformat

我在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

谢谢

2 个答案:

答案 0 :(得分:2)

虽然根据docsTimestampDate的扩展名:

  

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()方法将返回字符串你想要的格式。