Java: unparseable исключение даты

При попытке преобразовать формат даты я получаю exception:unparseable дату и не знаю, как решить эту проблему.

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

То, что я пытался сделать, следующее:

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

и пример входной строки следующий:

04.01.2010 1:32:27 UTC

Делает любой знает, как преобразовать дату в качестве примера (Строка) выше в Формат строки dd. MM.yyyy HH:mm:ss?

Спасибо!

Править: Я зафиксировал неправильный входной формат даты, но тем не менее он не работает. Выше вставляемый метод, и ниже отображаемое изображение от сеанса отладки.

сопроводительный текст http://img683.imageshack.us/img683/193/dateproblem.png

#Update я работал

String[] timezones = TimeZone.getAvailableIDs();

и в массиве существует Строка UTC. Это - странная проблема.

Я сделал грязный взлом, который работает:

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.

26
задан Niko Gamulin 5 January 2010 в 23:35
поделиться

1 ответ

[

] Здесь вы в основном полагаетесь на [][] Date#toString()[][] , которая уже имеет фиксированный паттерн. Для преобразования объекта Java []Date[] в другой читаемый человеком строковый шаблон, вам понадобится [][]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[].[

] [

][]Update:[] Хорошо, я провел тест:[

] [
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)[

] [

][]Update 2:[] согласно вашему редактированию, у вас действительно есть []ParseException[] на этом шаблоне. Самой подозрительной частью будет часовой пояс []UTC[]. Действительно ли это [] известно [] в вашей Java среде? Какую версию Java и какую версию операционной системы вы используете? Проверьте [][]TimeZone.getAvailableIDs()[][]. Между ними должна быть []UTC[].[

].
50
ответ дан 28 November 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: