2015-09-23 3 views
-2

им не в состоянии разобрать строку на сегодняшний деньJava: ошибка исключение не поддается синтаксическому анализу Дата

public class Main { 
    public static void main(String s[]) 
    { 
     SimpleDateFormat mdyFormat1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm.ss.SSSZ"); 
     String date="2015-08-27T11:46:35.336Z"; 

     try { 
      Date date1=mdyFormat1.parse(date); 
      System.out.println(date1); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 

получаю ошибку

java.text.ParseException: Unparseable date: "2015-08-27T11:46:35.336Z" 
    at java.text.DateFormat.parse(Unknown Source) 
    at com.connectm.onprocess.logincontroller.Main.main(Main.java:14) 
+3

'.' вместо': ' –

ответ

1

У вас есть две проблемы там:

  1. 2015-08-27T11:46:35.336Z, двоеточие (:) между 46 и 35, это должно быть. (точка). Что касается формата new SimpleDateFormat("yyyy-MM-dd'T'HH:mm.ss.SSSZ"). Так должно быть 2015-08-27T11:46.35.336Z. И Z, что является следующей проблемой.
  2. И Z в конце строки также является неправильным, он должен быть чем-то вроде «2015-08-27T11: 46.35.336-0800», чтобы заставить его работать. Но если вы все еще не понимаете Z части смотрите в документации по http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html#rfc822timezone
1

Обратите внимание, что инициализация mdyFormat1 объекта изменена с

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm.ss.SSSZ");

в

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");

public static void main(String[] args) { 
    SimpleDateFormat mdyFormat1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
    String date="2015-08-27T11:46:35.336Z"; 

    try { 
     Date date1=mdyFormat1.parse(date); 
     System.out.println(date1); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Выход:

Чт 27 августа 11:46:35 CDT 2015

1

Как другие отметили, ваш шаблон форматирования не в соответствии со своими входными данными.

java.time

Кроме того, вы используете старые устаревшие классы, которые оказались хлопотно, сбивает с толку, и недостатки. В Java 8 и более поздних версиях они были заменены новой встроенной инфраструктурой java.time.

Ваши входные данные соответствуют стандарту ISO 8601. Этот формат используется по умолчанию в java.time для синтаксического анализа и формирования строковых представлений значений даты и времени. Поэтому нет необходимости указывать форматтер.

Instant instant = Instant.parse("2015-08-27T11:46:35.336Z"); 
String output = instant.toString(); 

При необходимости можно назначить часовой пояс.

ZoneId zoneId = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId); 
Смежные вопросы