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

时间:2011-07-09 17:39:14

标签: java sql date format 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数据库中提取的旧存储时间值

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

我需要知道一个是否大于,小于或等于另一个。日期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种子不正确。洞察力赞赏

2 个答案:

答案 0 :(得分:6)

我相信您只需要在格式字符串中将“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进行与日期/时间相关的工作,并避免将日期/时间数据作为文本存储在数据库中:)

答案 1 :(得分:2)

是的,日期格式不正确。这是一个演示:

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));
    } 
}