2012-05-19 2 views
2

У меня возникла проблема с преобразованием даты и времени в java.Преобразование даты и времени в java при чтении файла

На самом деле я читаю строку из файла, разбирая эту строку и сохраняя ее в массив строк , теперь инициализируя некоторые переменные этим массивом. моя проблема Я сохраняю эти значения в другом файле, сохраняя при этом формат даты. Я отправляю свой код.

строка я чтение из файла:

 
Wed May 02 12:07:54 EST 2012,Task 1 for Test 1,20 

код я был прописан:

String s = br.readLine(); 
String[] list = s.split(","); 
this.description = list[0];     
this.weight = Integer.parseInt(list[1]); 
this.dueDate = new Date(list[2]); 
//this.dueDate = dateFormat.parse(list[2]); 
//SimpleDateFormat dateFormat = new SimpleDateFormat("E,dd MMM yyyy HH:mm.ss"); 
pw.println(description + "," + weight + "," + dueDate); 

выход моего кода:

 
Thu May 03 03:07:54 EST 2012,Task 1 for Test 1,20 
+1

Вы либо не указали свой точный код, либо ваш точный ввод - вы должны получить исключение NumberFormatException для «Задача 1 для теста 1» в инструкции parseInt. – GregHNZ

+0

Да, и он пытался создать дату с «20». –

+0

Это проблема с чтением файла или разделительной строкой или форматом даты ??? –

ответ

0

Попробуйте использовать метод .toString() и преобразуйте this.weight в String без синтаксического анализа.

1

Вам необходимо использовать SimpleDateFormat, чтобы разобрать дату ввода.

Предполагая, что ваш ввод данных в формате Вы разместили, (так дата список [0]) поместить это в вместо:

SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); 
this.dueDate = dateFormat.parse(list[0]); 

Важно в том, что вы говорите, его проверьте часовой пояс (zzz). Это должно выяснить правильное, фактическое, время, которое описано.

Если вы просто распечатываете, оно будет (по умолчанию) печатать в вашем местном часовом поясе.

+0

Вы пробовали? Я не работаю для меня, Wed и May не могут разбираться во входных данных. –

+0

Да, попробовал, сделал работу для меня. Я использую openjdk - «среда выполнения OpenJDK (IcedTea6 1.10.6) (6b22-1.10.6-0ubuntu1)». Ничего страшного - для того, чтобы найти свое решение - вот что это значит. – GregHNZ

+0

Возможно, он работает только с OpenJDK, у меня только Oracle JDK, и даже с 1.6 он бросает 'java.text.ParseException'. –

1

Я не согласен с ответом @GrefHNZ, потому что он не работает с list[0] = Wed May 02 12:07:54 EST 2012. Wed и May не могут разбираться во входных данных.

Я сделал это решение (работает только для JDK7):

public static void main(String[] args) 
    String s = "Wed May 02 12:07:54 EST 2012,Task 1 for Test 1,20"; 
    String[] list = s.split(","); 
    String dateDesc = list[0]; 
    String dateToParse = createStringToParse(dateDesc); //return "3 05 02 12:07:54 CEST 2012" 
    SimpleDateFormat dateFormat = new SimpleDateFormat("u MM dd kk:mm:ss z yyyy"); 
    Date dueDate=null; 
    try { 
     dueDate = dateFormat.parse(dateToParse); 
    } catch (ParseException ex) { 
     Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    System.out.println(dueDate); //print "Wed May 02 12:07:54 CEST 2012" 
} 
private static String createStringToParse(String dateDesc) { 
    int idx=dateDesc.indexOf(" "); 
    String day = dateDesc.substring(0,idx); 
    String month = dateDesc.substring(idx+1,dateDesc.indexOf(" ",idx+1)); 
    String rest = dateDesc.substring(dateDesc.indexOf(month)+month.length()); 
    switch(day){ 
     case "Mon" : 
      day="1";break; 
     case "Tue" : 
      day="2";break; 
     case "Wed" : 
      day="3";break; 
     case "Thu" : 
      day="4";break; 
     case "Fri" : 
      day="5";break; 
     case "Sat" : 
      day="6";break; 
     case "Sun" : 
      day="7";break; 
    } 

    switch(month){ 
     case "Jan" : 
      month="01";break; 
     case "Feb" : 
      month="02";break; 
     case "Mar" : 
      month="03";break; 
     case "Apr" : 
      month="04";break; 
     case "May" : 
      month="05";break; 
     case "Jun" : 
      month="06";break; 
     case "Jul" : 
      month="07";break; 
     case "Aug" : 
      month="08";break; 
     case "Sep" : 
      month="09";break; 
     case "Oct" : 
      month="10";break; 
     case "Nov" : 
      month="11";break; 
     case "Dec" : 
      month="12";break; 
    } 

    return day+" "+month+rest.replace("EST", "CEST"); 
} 

Чтобы понять SimpleDateFormat читать Oracle documentation.

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