Java - 将日期格式化的String从SQL db转换为日期对象以进行比较

CQM*_*CQM 1 java sql format date simpledateformat

我有存储在数据库中的字符串(例如:Sat Jul 09 14:20:31 EDT 2011)

它存储为字符串(我知道SQL的日期功能,但我现在还没有探索).

我想强调这一点并使用该Date.compare功能将其与当前时间进行比较

Date currentDate = new Date(); // the new current time value mCursor.getString(mCursor.getColumnIndex(TIMECOLUMN) //从SQL数据库中提取的旧存储时间值

从数据库我有一个字符串值已经格式化为正确的日期.但是我没有明显的功能可以将它与我当前的日期作为日期对象进行比较.

我需要知道一个是否大于,小于或等于另一个.Date compare函数允许这样做,但对象需要是一个日期对象.

我已尝试SimpleDateFormat使用字符串的日期格式播种,但我得到一个解析异常"不可解析的日期",也许是因为它已经格式化了?

Date currentDate = new Date();
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种子不正确.洞察力得到赞赏

Jon*_*eet 6

我相信你只需要在格式字符串中将"M"更改为"MMM":

SimpleDateFormat format = new SimpleDateFormat("E MMM d HH:mm:ss z y");
Run Code Online (Sandbox Code Playgroud)

"M"是潜在的单位数值,例如1,10等."MMM"是短月份名称(例如"Jul","Sep").

但是,您可能还应指定日期格式的区域设置.我还强烈建议您将当前的大量语句分成几个部分,以便更容易理解调试:

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

if (currentDate.compareTo(dbDate) > 0) {
}
Run Code Online (Sandbox Code Playgroud)

我还鼓励您使用Joda Time进行与日期/时间相关的工作,并避免将日期/时间数据存储为数据库中的文本:)