2016-07-05 1 views
1

У меня возникла странная проблема с использованием метода SimpleDateFormat в Android. Иногда (очень редко) format метод возвращает плохую форматированную дату. Вот код и ниже результата. Можете ли вы объяснить мне причину этого?Android SimpleDateFormat сходит с ума

Вот код:

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

Хотя Timestamp является продолжением Date по docs:

Наследование отношений между Timestamp и java.util.Date действительно обозначает наследование реализации, а - не Тип наследования.

Чтобы устранить проблему, вы можете попробовать использовать Calendar вместо:

Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(timestamp.getTime()); 
String format = dateFormat.format(cal.getTime()); 
+0

Благодарим за быстрый ответ. Я попробую ваше решение. Во всяком случае, я не понял, потому что он терпит неудачу только иногда (примерно 1 раз каждые 1000). – user2795913

0

TimeStamp класса уже возвращает строку в заданном формате (посмотрите на поле TIME_FORMAT_REGEX в TimeStamp классе), поэтому применение toString() метода вернет вам строку в желаемом формате.

 Смежные вопросы

  • Нет связанных вопросов^_^