2017-10-17 225 views
-3

我正在使用Java 8,並且在我的.txt文件中有一個字符串,我想將其轉換爲LocalDateTime對象。使用Java 8將字符串轉換爲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.需要注意的是這樣的:

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

沒有在Java中工作8

編輯:我沒有這個問題不夠清楚,我的壞:

我有這個字符串我.txt文件,並且我需要將它轉換爲LocalDateTime對象以便將其保存到類對象中,但我需要它以所述的格式將其打印出來以便在表格中打印出來。我不希望它以原始格式打印出"2017-10-06T17:48:23.558"。我希望它打印出來是這樣的:"10.06.2017. 17:48:23"

+2

你做了一個完全錯誤的模式... – Phoenix

+0

在你的日期索引'2'沒有'。'按照您的模式暗示 – A4L

+1

'DateTimeFormat.forPattern'來自Joda-Time,而'DateTimeFormatter.ofPattern'來自Java 8'java.time' API。你想使用哪一個? – 2017-10-17 09:33:31

回答

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:如果輸入的是在一個不同的格式,你應該使用一個格式化來解析和一個又一個的格式。 Check the javadoc查看所有可用的格式。

+0

是的,這個作品,謝謝,並且我很抱歉沒有讓我的第一篇文章清楚...將此行'System.out.println(localDateTime.format(formatter));'在javafx中工作? – mdenci

+0

@mdenci實際上最好將format方法的結果設置爲String,然後用它做任何你需要的東西 – 2017-10-17 09:53:17

1

使用LocalDateTime.parse沒有任何額外的格式將其解析爲LocalDateTime

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");