Как правильно отформатировать необычную строку даты с помощью Java SimpleDateFormat? - PullRequest
2 голосов
/ 26 сентября 2011

У меня есть дата в следующем формате:

Pon Cze 07, 2011 9:42 pm

Это польский эквивалент английской даты:

Mon Jun 07, 2011 9:42 pm

Я использую следующее средство сравнения SimpleDateFormat:

SimpleDateFormat("EEE MMM dd, yyyy H:mm a", new Locale("pl", "PL"))

Но дата не может быть проанализирована из-за AssertionFailedError.Я попробовал другое решение, но никто не работает для меня.У вас есть идеи, что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 26 сентября 2011

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

  1. День wt, а не Pon, в языке pl
  2. Индикатор AM / PM не принимается во внимание, потому что вы использовали H (что означает час от 0 до 23) вместо h.

Я бы просто проанализировал первый символ после первого пробела (чтобы избежать разбора "Pon") и заменил H на h. в шаблоне:

DateFormat df = new SimpleDateFormat("MMM dd, yyyy h:mm a", new Locale("pl", "PL"));
Date d = df.parse(s.substring(s.indexOf(' ') + 1));
1 голос
/ 26 сентября 2011

Кажется, что день недели представлен только двумя буквами, какой бы ни была причина этого. Попробуйте этот код и проверьте вывод

    SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd, yyyy H:mm a", new Locale("pl", "PL"));
    GregorianCalendar gc = new GregorianCalendar(new Locale("pl", "PL"));
    gc.setTime(new Date(System.currentTimeMillis()));
    System.out.println(sdf.format(gc.getTime()));

Мой вывод: «Wt wrz 27, 2011 11:05 AM»

Так что, возможно, если вы попробуете два рабочих дня с буквами, это может сработать

...