Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Парсинг даты


Автор: Entry_N3 24.8.2007, 12:29
Есть 
Код

String dateEx = "24.08.07 16:42:01";


При попытке получить объект Date вида "16:42:01" через
Код

Date d = (new SimpleDateFormat("HH:mm:ss")).parse(dateEx);


Вылетает
java.text.ParseException: Unparseable date: "24.08.07 16:42:01"

Как получить объект Date вида "16:42:01"?

Автор: AntonSaburov 24.8.2007, 13:05
Код

import java.util.Locale;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;

public class Test
{
  public static void main(String[] args) 
  {
    String time = "15:34:09";

    SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");

    try {
      Date d = df.parse(time);
      System.out.println(d.toString());
    }
    catch(ParseException p_e) {
      p_e.printStackTrace();
    }
  }
}


Хотя я не очень понял проблему - то дата с часами, то надо часы без даты. Как-нибудь определится надо smile

Автор: Entry_N3 24.8.2007, 13:33
AntonSaburov, на вход подай  "24.08.08 15:34:09", что получишь? 

Автор: Maksym 24.8.2007, 13:36
Entry_N3
ну так для этого паттерн SimpleDateFormat должен быть "dd.MM.yy HH:mm:ss"...

Автор: AntonSaburov 24.8.2007, 13:37
Ну так тогда и формат должен быть другой

"dd.MM.yy HH:mm:ss"

или тебе надо чтобы обе строки могли ?

Я бы тогда ловил эксепшн на длинной строке формата и пытался бы парсить по короткой. Ну если оба не прошли - значит ругаться на входные данные

Автор: Entry_N3 24.8.2007, 14:16
Сделал так: 
Код

            try {
                String startTime = startDay.substring(startDay.indexOf(" ")+1); 
                            ....
    
                }
            } catch(IndexOutOfBoundsException ioobe){
                                                                 ....
            }

чтобы получить в формате HH:mm:ss, но не думаю, что это лучшее решение.

Автор: Maksym 24.8.2007, 14:22
Entry_N3
Ты можешь объяснить понятным языком в чем задача..?  smile 

Автор: nornad 24.8.2007, 14:52
Entry_N3, если так уж надо парсить дату - используй те же регулярки, например.

Автор: Entry_N3 24.8.2007, 15:22
Maksym, задача в том, что делая так:

Код

String dateEx = "24.08.07 16:42:01";
Date d = (new SimpleDateFormat("HH:mm:ss")).parse(dateEx);


вылетает объект исключения. 

Но делая так:
Код

String dateEx = "24.08.07 16:42:01";
Date d = (new SimpleDateFormat("dd.MM.yyyy")).parse(dateEx);


все в порядке.

Используя последнюю аналогию, я хотел получить часы, минуты, секунды, так же как получаю день, месяц, год. Но не получилось! Вопрос заключался в "Как получить объект Date вида часов, минут, секунд имея на входе строку вида 24.08.07 16:42:01"?

Автор: AntonSaburov 24.8.2007, 15:36
Цитата(Entry_N3 @  24.8.2007,  15:22 Найти цитируемый пост)
объект Date вида часов, минут, секунд имея на входе строку вида 24.08.07 16:42:01"?

Как это - Date должна включать дни, месяцы, годы - одними часами и минутами тут никак.

Автор: Maksym 24.8.2007, 15:39
Entry_N3
Код

import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;


public class DateParser {

    public static void main(String[] args) throws ParseException {
        String dateEx = "24.08.07 16:42:01";        
        String PATTERN_SHORT = "HH:mm:ss";
        String PATTERN_FULL = "dd.MM.yy HH:mm:ss";        
        System.out.println(parseDate(dateEx, PATTERN_SHORT));
    }

    public static Date parseDate(String str, String pattern) {
        return (new SimpleDateFormat(pattern)).parse(str, new ParsePosition(str.length() - pattern.length()));        
    }
    
}


Добавлено через 2 минуты и 26 секунд
в случае PATTERN_SHORT старшие поля даты будут заполнены умолчанием (01.01.1970)

Автор: Entry_N3 24.8.2007, 20:22
Maksym, ParsePosition это круто.  smile 

Автор: LSD 26.8.2007, 08:51
Цитата(Entry_N3 @  24.8.2007,  16:22 Найти цитируемый пост)
Вопрос заключался в "Как получить объект Date вида часов, минут, секунд имея на входе строку вида 24.08.07 16:42:01"?

Распарсить всю дату, а затем установить день/месяц/год в нужное значение.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)