2012-05-23 8 views
1

В настоящее время у меня есть ArrayList, заполненный датами в формате 2012-06-19, и я пытаюсь добавить их все в массив из Date.Как преобразовать строку в дату Java

Это часть кода, который не удается мне,

listIterator = dateValues.listIterator(); 

    Date [] dates = new Date[dateValues.size()]; 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    int i = 0; 
    try{ 
     while(listIterator.hasNext()) 
     { 
      //System.out.println(listIterator.next().toString()); 
      dates[i] = dateFormat.parse(listIterator.next().toString()); 
      i++; 

     } 

     for(i = 0; i < dates.length;i++) 
     { 
      System.out.println(dates[i]); 
     } 
    } 
    catch(Exception e){e.printStackTrace()}; 
} 

Линия

//System.out.println(listIterator.next().toString()); 

напечатает каждую дату в ArrayList. Вывод выглядит,

2007-09-07 
2007-09-07 
2007-10-05 
2007-10-05 
2007-10-05 
2007-10-05 
2007-10-05 

но моя dateFormat линия никогда не добавляет каких-либо значений dates[]. Любая помощь будет оценена по достоинству.

И нет, это не домашнее задание.

+0

Можете ли вы привести пример из строк, которые вы имеете в dateValues? – noShowP

+0

Я сомневаюсь, что это исключение, которое поймано и осталось незамеченным. Проверьте формат String –

+1

Вы должны ** НИКОГДА ** не поймать исключение и игнорировать его, если у вас нет веской причины. По крайней мере, распечатайте его. –

ответ

2

Попробуйте это:

List<String> dateValues = new ArrayList<String>(); 
Date[] dates = new Date[dateValues.size()]; 
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
int i = 0; 
for (String dateValue : dateValues) { 
    dates[i++] = dateFormat.parse(dateValue); 
} 

«Меньше кода хорошо», так что используйте язык (цикл просмотра и т.д.), чтобы сохранить ваш код небольшой и чистый (как приведенный выше код).

Примечание для педантов, прежде чем вы прокомментируете: «код меньше», если он остается читаемым.

1

Если линия:

//System.out.println(listIterator.next().toString()); 

является раскомментирована next() вызывается дважды в одной итерации, что в конечном итоге приведет к NoSuchElementException броска. Это означает, что последующий цикл for не будет выполнен. Храните результат next():

while(listIterator.hasNext()) 
{ 
    String s = listIterator.next().toString(); 
    System.out.println(s); 
    dates[i] = dateFormat.parse(s); 
    i++; 
} 
+0

Еще не играющий в кости, даты распечатываются в порядке, но ничего не добавляется к 'date []' – TomSelleck

0

Решение по @tom Celic, работает для меня.

List<String> dateValues = new ArrayList<String>(); 
    dateValues.add("2012-09-08"); 
    dateValues.add("2011-09-08"); 
    Date[] dates = new Date[dateValues.size()]; 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    int i = 0; 
    for (String dateValue : dateValues) { 
     dates[i++] = dateFormat.parse(dateValue); 
    } 
    System.out.println(dates.length); 
    System.out.println(dates[0]); 
    System.out.println(dates[1]); 

Он печатает:

2 
Sat Sep 08 00:00:00 IST 2012 
Thu Sep 08 00:00:00 IST 2011 
Смежные вопросы