Синтаксический анализ Java DateTime

#java #parsing #date #time

#java #синтаксический анализ #Дата #время

Вопрос:

У меня есть следующий код для простого преобразования даты и времени в формат

 SimpleDateFormat sdfClient = new SimpleDateFormat("yyyyMMddhhmmss.s");
SimpleDateFormat sdfFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");

pmList.add(sdfClient.format(sdfFormat.parse(pmData[k].retrievalTime)));
 

Хочу изменить формат на sdfClient, но по какой-то причине eclipse выдает ошибку:

 java.text.ParseException: Unparseable date: "20140623135000.0"
at java.text.DateFormat.parse(DateFormat.java:357)
at com.syntronic.client.GenerateCSV.writepmData(GenerateCSV.java:220)
at com.syntronic.client.GenerateCSV.writeMEData(GenerateCSV.java:187)
at com.syntronic.client.GenerateCSV.<init>(GenerateCSV.java:87)
at com.syntronic.client.Client.main(Client.java:213)
 

Кто-нибудь знает причину этого?

Комментарии:

1. Я предполагаю, что pmData[k] он содержит формат первого рода, но сначала вы анализируете его как второй вид. Попробуйте поменять местами вызовы, используя sdfClient и sdfFormat .

2. Какой тип у массива pmData [k]? sdfFormat.parse() принимает тип string в качестве параметра.

Ответ №1:

Все должно быть как раз наоборот:

 pmList.add(sdfFormat.format(sdfClient.parse(pmData[k].retrievalTime)));
 

Объяснение:

 pmList.add(
       sdfFormat.format(  <-- Gives a string 23/06/2014 01:50:00
            sdfClient.parse( <-- Gives a Date corresponding to the time 20140623135000.0
                  pmData[k].retrievalTime   <-- Time 20140623135000.0
               )
        )
        );
 

Ответ №2:

У вас есть свой форматировщик и синтаксический анализатор

 pmList.add(sdfClient.format(sdfFormat.parse(pmData[k].retrievalTime)));
 

В основном говорится, "yyyyMMddhhmmss.s".format("dd/MM/yyyy hh:mm:ss".parse(...))

Вы хотите использовать

 pmList.add(sdfFormat.format(sdfClient.parse(pmData[k].retrievalTime)));
 

Вместо этого…