2016-07-05 3 views
1

AndroidでSimpleDateFormatメソッドを使用すると奇妙な問題に直面しています。場合によっては(非常にまれに)formatメソッドが不正な形式の日付を返します。ここにコードと出力の下にあります。あなたは私にその0の原因を説明できますか?Android SimpleDateFormat going crazy

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 

Timestampなくなり、あなたに

答えて

2

ありがとうdocsに応じDateを拡張したものです:

Timestampとjava.util.Dateの間の継承関係は、実際には実装継承を表し、ではなく、型の継承を表します。

はあなたの問題を解決するには、代わりにCalendarを使用して試みることができる:

TimeStampクラスがすでに指定された形式で文字列を返します
Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(timestamp.getTime()); 
String format = dateFormat.format(cal.getTime()); 
+0

迅速な回答ありがとうございます。私はあなたの解決策を試みます。とにかく私は理解できませんでした。なぜならそれは時々だけ失敗するからです(1000回ごとに約1回)。 – user2795913

0

TimeStampクラス内のフィールドTIME_FORMAT_REGEXを見て)、そのtoString()メソッドを呼び出しますあなたが望む形式の文字列を返します。

関連する問題