Java: исключение исключаемых дат
При попытке преобразовать формат даты я получаю исключение: неподдерживаемая дата и не знаю, как исправить эту проблему.
Я получаю строку, которая представляет дату события, и хотел бы отобразить эту дату в другом формате в графическом интерфейсе.
То, что я пытался сделать, следующее:
private String modifyDateLayout(String inputDate){
try {
//inputDate = "2010-01-04 01:32:27 UTC";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate);
return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);
} catch (ParseException e) {
e.printStackTrace();
return "15.01.2010";
}
}
В любом случае строка
String modifiedDateString = originalDate.toString();
является фиктивным. Я хотел бы получить строку даты в следующем формате:
dd.MM.yyyy HH: mm: ss
а пример строки ввода - следующий:
2010-01-04 01:32:27 UTC
Кто-нибудь знает, как преобразовать примерную дату (String) выше в формат String dd.MM.yyyy HH: mm: ss?
Спасибо!
Изменить: я исправил неверный формат даты ввода, но все же он не работает. Выше находится вставной метод, а ниже - изображение экрана из сеанса отладки.
alt text http://img683.imageshack.us/img683/193/dateproblem.png
автообновление
Я побежал
String[] timezones = TimeZone.getAvailableIDs();
и в массиве есть строка UTC String. Это странная проблема.
Я сделал грязный хак, который работает:
private String modifyDateLayout(String inputDate){
try {
inputDate = inputDate.replace(" UTC", "");
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(inputDate);
return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);
} catch (ParseException e) {
e.printStackTrace();
return "15.01.2010";
}
}
Но все же я предпочел бы преобразовать исходный вход без сокращения часовой пояс.
Этот код написан для телефона Android с помощью JDK 1.6.
Ответы
Ответ 1
То, что вы в основном делаете здесь, опирается на Date#toString()
, у которого уже есть фиксированный шаблон. Чтобы преобразовать объект Java Date
в другой человеческий читаемый шаблон String, вам нужно SimpleDateFormat#format()
.
private String modifyDateLayout(String inputDate) throws ParseException{
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate);
return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);
}
Кстати, исключение "неотразимая дата" может быть здесь только выбрано SimpleDateFormat#parse()
. Это означает, что inputDate
не находится в ожидаемом шаблоне "yyyy-MM-dd HH:mm:ss z"
. Вам, вероятно, потребуется изменить шаблон, чтобы он соответствовал фактическому шаблону inputDate
.
Обновление: Хорошо, я сделал тест:
public static void main(String[] args) throws Exception {
String inputDate = "2010-01-04 01:32:27 UTC";
String newDate = new Test().modifyDateLayout(inputDate);
System.out.println(newDate);
}
Это правильно печатает:
03.01.2010 21:32:27
(Я нахожусь в GMT-4)
Обновить 2: в соответствии с вашим редактированием, вы действительно получили ParseException
. Самой подозрительной частью будет часовой пояс UTC
. Известно ли это на вашей Java-среде? Какую версию Java и какую версию ОС вы используете? Проверьте TimeZone.getAvailableIDs()
. Между ними должен быть UTC
.