2013-06-22 2 views
3

Я использую java 7, и я пытаюсь разобрать дату из плоского файла.Неверное использование или проблема Java 7 SimpleDateformat?

Даты этого файла имеют следующий формат: «30-Mar-2012 14:05:02». Я не могу это изменить, это зависит от другого программного обеспечения.

В соответствии с javadoc этот формат: «dd-MMM-yyyy HH: mm: ss» - один для использования.

Но по неизвестной причине это не работает.

Вот небольшая программа, которая воспроизводит проблему.

package javaapplication2; 

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class JavaApplication2 { 

    public static void main(String[] args) { 
     Date d = null; 
     try { 
      SimpleDateFormat df; 
      df = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss", Locale.FRANCE); 
      d = df.parse("30-Mar-2012 14:05:02"); 

     } catch (ParseException ex) { 
      System.err.println(ex.getMessage()); 
     } 
     if (d != null) { 
      System.out.println(d.toString()); 
     } 
    } 
} 

Проблема не происходит, когда я поставил «с» после «Mar» в первоначальной даты («Марс» полное название марта на французском языке, это также работает с «март» и Locale.US в формате).

Am-I что-то не так? Действительно ли это можно сделать так? У меня там есть недокументированная проблема в java об этом?

+0

Что не работает? – JHS

+0

df.parse исключает исключение – OOProg

+0

Является ли это проблемой для других месяцев (короткое имя) для французского? – JHS

ответ

2

Объяснение здесь

DateFormatSymbols dfs = new DateFormatSymbols(Locale.FRENCH); 
    for (String s : dfs.getShortMonths()) { 
     System.out.print(s + " "); 
    } 

выходного

janv. f?vr. mars avr. mai juin juil. ao?t sept. oct. nov. d?c. 

, как вы можете увидеть сокращенную форму для марс = Марс.

+0

Спасибо за ваш быстрый ответ. Я уже пробовал это, он работает (я отредактировал свое первое сообщение) Проблема в том, что я не могу изменить формат даты в своих исходных файлах. – OOProg

+0

OK см. Новый ответ –

+0

Итак, я думаю, что моя дата не сформирована с французскими местными. Мне нужно это подтвердить, но я думаю, что я буду использовать Locale.US. Спасибо за ваш ответ – OOProg

1

Тестовые код

 Calendar calendar = Calendar.getInstance(); 
     calendar.set(2012, 2, 30); 

    try { 
     SimpleDateFormat df; 
     df = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss", Locale.FRANCE); 
     String s=df.format(calendar.getTime()); 
     System.out.println(s); 

     } 

результат напечатает: 30-Марс-2012 23:17:46

Так он ожидает mars вместо Mar

'Mar' является Locale.US

+0

Да, потому что французская аббревиатура не соответствует моему входному формату. Я буду использовать Locale.US Спасибо за ваш ответ. – OOProg

Смежные вопросы