Что-то не так с парсингом. Вы не узнаете об этом из-за этого:
catch (ParseException e) {
}
По сути, это означает: «Меня не волнует, что пойдет не так, — игнорируй это». Как минимум по крайней мере вы должны регистрировать ошибку и, что более вероятно, позволить исключению всплывать.
Исключения — невероятно важный диагностический инструмент — не просто перехватывайте их и игнорируйте.
РЕДАКТИРОВАТЬ: Теперь, когда вопрос изменился, мы видим исключение, но код все еще продолжается, как будто ничего не произошло. Даже если вы действительно хотите в основном игнорировать исключение, вам нужно решить, какое значение вы хотите date
иметь в случае сбоя синтаксического анализа. Ясно, что null
бесполезен, поэтому вам нужно либо позволить всплыть исключению (чтобы сообщить вызывающей стороне, что синтаксический анализ не удался) или вернуть какое-то значение разницы (например, дату по умолчанию, или сегодня, или что-то в этом роде).
Теперь, когда это случается, позволяя всплывать исключениям, мы также упрощаем код. На моей машине это не вызывает исключения, но, возможно, на вашей:
import java.util.*;
import java.text.*;
public class Test {
public static void main(String[] args) throws Exception {
Calendar cal = parseReturnDate("19 AUG 2011");
System.out.println(cal);
}
public static Calendar parseReturnDate(String returnDate)
throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy");
Date date = formatter.parse(returnDate);
Calendar cal=Calendar.getInstance();
cal.setTime(date);
return cal;
}
}
Обратите внимание, что нам не нужно объявлять переменные отдельно, чтобы присвоить им значения, и теперь, когда мы позволяем исключению всплывать, мы можем просто присвоить date
его полезное значение напрямую.
Я предполагаю, что в вашем часовом поясе по умолчанию не используется "AUG" в качестве короткого названия месяца, но я не могу точно сказать, не видя исключения. Если это так, вы можете указать локаль при создании средства форматирования:
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy",
Locale.US);
Вы можете также указать часовой пояс.
(Кроме того, Joda Time – гораздо более совершенный API для обработки даты и времени. Если вы Если впоследствии вы будете выполнять какую-либо существенную работу со значением, я определенно рекомендую использовать его в течение Date
/Calendar
.)
17.08.2011
date
иметь? Почему бы вам не сосредоточиться на исправлении ошибки синтаксического анализа? Чтобы мы могли диагностировать сбой синтаксического анализа, вы должны сообщить нам, какое исключение было сгенерировано. 17.08.2011