2016-03-23 22 views
3

以下の形式の文字列を日付に変換するのが少し難しいです。 ParseExceptionをスローし続けます。Java文字列、DateFormatが機能しない

文字列:2015年11月14日17:29:Java string to date conversionが、任意の運を持っていない:16.543934

私は、すでにこの辺り特に、このリンクを見てきました。

ここに私の方法は、現在のようになります。

private Date parseTime(String input) { 
    // input format: 2015-11-14 17:29:16.543934 
    try { 
     DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssSSSSSS"); 
     Date date = format.parse(input); 
     return date; 
    } catch (ParseException e) { 
     System.out.println("Could not parse time. ID: " + this.id); 
    } 
    return null; 
} 

編集:私は(「」私はAを逃し述べ秒とミリ秒の間)下記た答えに

ジョンスキートが持っていました非常に良い点です: "それはあなたが期待している通りに動作しません。あなたの入力は543934ミリ秒と扱われますので、17:38:19として解析されます。

実際にこのレベルの精度は必要ありませんので、ミリ秒単位で切り捨てますが、小数点以下6桁の精度を保つ方法を知っていれば、どのように知ることができます。

+0

あなたは、Java-8( 'java.time'パッケージのいずれかでマイクロ秒の精度を保つことができます)またはThreetenBP(Java-6 + 7のバックポート)またはMy Library Time4Jを使用してください。他のライブラリと古いJDKはミリ秒の精度しか提供していません。 –

答えて

0

私は欠落していました。 "

DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS"); 
+0

ミリ秒は、最大3桁までです(ミリ秒= 1000、つまり0〜999の値)。 – Thomas

+1

あなたはそれが期待通りにはまだ動作しません。あなたの入力は543934ミリ秒と扱われますので、17:38:19として解析されます。 –

2

あなたは文字列の形式でドットが欠落しています:秒、ミリ秒なので、次のように新しいDateFormatのがあるとの

ss.SSSSSS

それがなければなりません。

DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS"); 
+1

これはJon Skeetが与えた理由ではうまくいかないことが分かります: "これはあなたの期待通りに動作しません。あなたの入力は543934ミリ秒と扱われますので、17:38として解析されます: 19. " – JChristen

+0

SimpleDateFormatがnanoseccondを強制的に解析しようとすると、このように動作します。例えば、 2015-05-08 00:00:00.123456→2015-05-08 00:02:03.000456 – nariuji

0

これを宣言します。

String tt = "2015-11-14 17:29:16.543934"; 
    TextView textt; 

は、この使用:日付の

   try{  
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS"); 
        Date bod = format.parse(tt); 
        SimpleDateFormat rformat = new SimpleDateFormat("dd-MM-yyyy"); 
        textt.setText(rformat.format(bod)); 
       }catch (ParseException pe){ 

       } 

をあなたは両方のフォーマットを使用する必要が変換します。

  1. 前にフォーマット "YYYY-MM-DD HH:MM:ss.SSSSSS"
  2. 変換フォーマット "DD-MM-YYYY"
0

日はナノ秒を使用することはできません、それをできる?

DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS000"); 
0

SimpleDateFormatの 'S'はミリ秒で、マイクロ秒間は何もありません。 DateTimeFormatterで

(ジャワ8) 'S' の小数部分を意味し、あなたが問題なく文字列を変換することができます

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS"); 
LocalDateTime ldt = LocalDateTime.parse(input, dtf); 
Instant instant = ldt.atZone(ZoneId.systemDefault()).toInstant(); 
return Date.from(instant); 
関連する問題