Почему SimpleDateFormat неправильно анализирует мою дату? - PullRequest
0 голосов
/ 09 ноября 2010

Я пытаюсь избежать переустановки Eclipse для решения этой проблемы , поэтому я надеюсь, что кто-то может помочь с этой проблемой анализа дат. Вот что я делаю.

DateFormat dateFormat; 

Это переменная в моем классе. Я установил следующее.

dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// Example input: 2010-11-07 16:00:00

Когда вызывается другой метод, я создаю новый экземпляр java.sql.Date, используя передаваемые строки. Для ясности, вот сокращенная версия.

public void aMethod (String activateTime, String expireTime) {
    Date example = new Date(dateFormat.parse(activateTime).getTime());
    Date example2 = new Date(dateFormat.parse(expireTime).getTime());
}

Когда я смотрю на строки, полученные в результате этих операций (просто добавив .toString () к приведенным выше экземплярам), я получаю вывод, подобный следующему

2010-10-30
2010-11-29

... вместо входных строк, которые, как сообщается, будут ...

2010-10-30 17:00:00
2010-11-29 16:00:00

Кто-нибудь знает, почему он не дает мне дату в указанном мной порядке?

Ответы [ 3 ]

3 голосов
/ 09 ноября 2010

java.sql.Date содержит только часть даты datetime.Вы, вероятно, хотите использовать java.sql.Timestamp.

Timestamp example = new Timestamp(dateFormat.parse(activateTime).getTime());
Timestamp example2 = new Timestamp(dateFormat.parse(expireTime).getTime());

Так же работает в средней базе данных SQL.Тип данных DATE представляет только дату, тип данных TIME представляет только время.Тип данных TIMESTAMP (иногда называемый DATETIME) представляет дату и время.

Обратите внимание, что ваш часовой график неверен.В приведенных примерах вы бы предпочли использовать HH вместо hh.См. Также SimpleDateFormat javadoc .

См. Также:

2 голосов
/ 09 ноября 2010

Javadocs для java.sql.Date указывают, что метод toString возвращает строку в формате "гггг-мм-дд", поэтому вы видите правильное поведение. Объект Date не знает о форматере, который вы использовали для его создания. Чтобы получить вывод в том же формате, используйте метод DateFormat.format вместо toString:

public void aMethod (String activateTime, String expireTime) {
    Date example = new Date(dateFormat.parse(activateTime).getTime());
    Date example2 = new Date(dateFormat.parse(expireTime).getTime());
    System.out.println(example.toString() + " vs " + dateFormat.format(example));
    System.out.println(example2.toString() + " vs " + dateFormat.format(example2));
}
0 голосов
/ 09 ноября 2010

Вы пытались изменить java.sql.Date на java.util.Date?

...