Java - преобразовать форматированную строку String из базы данных SQL в объект даты для сравнения - PullRequest
1 голос
/ 09 июля 2011

У меня есть строка, хранящаяся в базе данных (пример: Sat Jul 09 14:20:31 EDT 2011)

Это хранится в виде строки (я знаю о возможностях дат в SQLs, но пока не буду изучать это).

Я хочу взять это сильное и сравнить его с текущим временем, используя функцию Date.compare

Date currentDate = new Date(); // the new current time value mCursor.getString(mCursor.getColumnIndex(TIMECOLUMN) // старое сохраненное значение времени, извлеченное из базы данных SQL

Из базы данных у меня есть строковое значение, уже отформатированное как правильная дата. Но у меня нет очевидной функции, чтобы сравнить это с моей текущей датой в качестве объекта даты.

Мне нужно знать, больше ли одно, меньше или равно другому. Функция Date compare позволит это сделать, но объект должен быть объектом даты.

Я попытался SimpleDateFormat заполнить с форматом даты строки, но я получаю исключение синтаксического анализа "непарсируемая дата", возможно, потому что это уже отформатировано?

Date currentDate = new Date();<br> SimpleDateFormat dateTest = new SimpleDateFormat("E M d HH:mm:ss z y"); if(currentDate.compareTo(dateTest.parse((mCursor.getString(mCursor.getColumnIndex(TIMECOLUMN))))) > 0)

возвращает java.text.ParseException: Unparseable date: Sat Jul 09 14:20:31 EDT 2011

Я подозреваю, что мое семя SimpleDateFormat неверно. Проницательность

Ответы [ 2 ]

6 голосов
/ 09 июля 2011

Я полагаю, что вам просто нужно изменить «M» на «MMM» в строке формата:

SimpleDateFormat format = new SimpleDateFormat("E MMM d HH:mm:ss z y");

«M» - это потенциально однозначное значение, например, 1, 10 и т. Д.«MMM» - это короткое название месяца (например, «Jul», «Sep»).

Однако вам, вероятно, следует также указать языковой стандарт формата даты.Я бы также настоятельно рекомендовал бы вам разбить ваше настоящее громадное утверждение на несколько битов, чтобы облегчить понимание и debug:

int timeColumn = mCursor.getColumnIndex(TIMECOLUMN);
String dbDateText = mCursor.getString(timeColumn);
Date dbDate = format.parse(dbDateText);

if (currentDate.compareTo(dbDate) > 0) {
}

Я бы такжерекомендуем вам использовать Joda Time для работы, связанной с датой / временем, и избегать сохранения данных даты / времени в виде текста в базе данных :)

2 голосов
/ 09 июля 2011

Да, формат даты неверен. Вот демо:

import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
    public static void main(String[] args) throws Exception {
        SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
        System.out.println(new Date());
        String string = "Sat Jul 09 14:20:31 EDT 2011";
        System.out.println(df.parse(string));
    } 
}
...