Подтвердить что ты не робот

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.

4b9b3361

Ответ 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.