2017-10-17 7 views
-3

私はJava 8を使用しています。LocalDateTimeオブジェクトに変換する私の.txtファイルに文字列があります。Java 8を使用してStringをLocalDateTimeに変換するDateTimeFormatter

String time1 = "2017-10-06T17:48:23.558"; 

DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss"); 
LocalDateTime alarmTime = LocalDateTime.parse(time1, formatter1); 

System.out.println(time1); 

これは私にこの例外与える:

Exception in thread "main" java.time.format.DateTimeParseException: Text '2017-10-06T17:48:23.558' could not be parsed at index 2 
at java.time.format.DateTimeFormatter.parseResolved0(Unknown Source) 
at java.time.format.DateTimeFormatter.parse(Unknown Source) 
at java.time.LocalDateTime.parse(Unknown Source) 

任意のアイデア?

P.S.私は私の.txtファイルにこの文字列を持っている

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd.MM.yyyy. HH:mm:ss"); 
DateTime dt = formatter.parseDateTime(string); 

編集

のJava 8では動作しません:私は私が悪い、十分な質問を明確にしていない。このことに注意してください私はそれをクラスオブジェクトに保存するために LocalDateTimeオブジェクトに変換する必要がありますが、表の中にそれを印刷するためには指定したフォーマットで必要です。私はそれが生フォーマットでそれが "2017-10-06T17:48:23.558"であることを印刷したくありません。 LocalDateTimeにそれを解析するために、追加のフォーマットなし "10.06.2017. 17:48:23"

+2

...インデックスで – Phoenix

+0

'2'何が 'はありません。'あなたのパターンが示しているように – A4L

+1

' DateTimeFormat.forPattern'はJoda-Timeから、 'DateTimeFormatter.ofPattern'はJava 8' java.time' APIからです。どちらを使いたいですか? –

答えて

1

出力のためにあなたがしたい形式("dd.MM.yyyy. HH:mm:ss")、入力と同じではありませんあなたはこのようなパターンを使用した場合には動作しますあなたはそれを解析するために使うことはできません。

この特定のケースでは、入力はISO8601 formatであるため、直接解析することができます。そして、あなたが望む形式にLocalDateTimeオブジェクトをフォーマットするフォーマッタを使用します。

String time1 = "2017-10-06T17:48:23.558"; 
// convert String to LocalDateTime 
LocalDateTime localDateTime = LocalDateTime.parse(time1); 
// parse it to a specified format 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss"); 
System.out.println(localDateTime.format(formatter)); 

出力は次のようになります。

2017年6月10日。午前17時48分23秒


PS:入力が別の形式にあった場合は、解析およびフォーマットに別の1つのフォーマッタを使用する必要があります。 Check the javadocをご覧ください。あなたの日付のあなたは完全に間違ってパターンをした

+0

はい、これはうまくいきます。この行は 'System.out.println(localDateTime.format(formatter));' javafxで動作しますか? – mdenci

+0

@mdenci実際には、フォーマットメソッドの結果を 'String'に設定して、それに必要なものをすべて実行する方が良いです –

1

使用LocalDateTime.parse:私はそれがこのようなものをプリントアウトしたい

jshell> java.time.LocalDateTime ldt = java.time.LocalDateTime.parse("2017-10-06T17:48:23.558"); 
ldt ==> 2017-10-06T17:48:23.558 
+0

これは、文字列が標準の[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)形式であるため動作します。これは 'LocalDateTime 'です。解析する(...) 'を理解する。 – Jesper

1

あなたの日付フォーマッタパターンが間違っています。あなたは

例を渡して、その文字列のと同じフォーマットを与える必要があります。

String date = "2016-08-16T10:15:30+08:00"; 

    ZonedDateTime result = ZonedDateTime.parse(date, DateTimeFormatter.ISO_DATE_TIME); 

    System.out.println("ZonedDateTime : " + result); 

    System.out.println("TimeZone : " + result.getZone()); 

    LocalDate localDate = result.toLocalDate(); 

    System.out.println("LocalDate : " + localDate); 
+0

私は進行中のプロジェクトの作業例を投稿しました –

+0

いいえ、編集済みの投稿は機能しますが、以前投稿した投稿は実際には機能しませんでした。でも、これは私が探しているものではありませんが、どうもありがとう、おそらく私は後でそれを必要とします。 – mdenci

0
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS"); 
関連する問題