有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java将SQL db中的日期格式字符串转换为日期对象以进行比较

我在数据库中存储了一个字符串(例如: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数据库中提取的旧存储时间值

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

我需要知道其中一个是否大于、小于或等于另一个。Datecompare函数将允许这样做,但对象必须是日期对象

我尝试了SimpleDateFormat以字符串的日期格式作为种子,但我得到了一个解析异常“unparsable date”,可能是因为它已经格式化了

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种子不正确。感谢您的真知灼见


共 (1) 个答案

  1. # 1 楼答案

    我相信您只需要将格式字符串中的“M”改为“MMM”:

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

    “M”是一个潜在的单位数值,例如1、10等。“MMM”是一个简短的月份名称(例如“七月”、“九月”)

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

    int timeColumn = mCursor.getColumnIndex(TIMECOLUMN);
    String dbDateText = mCursor.getString(timeColumn);
    Date dbDate = format.parse(dbDateText);
    
    if (currentDate.compareTo(dbDate) > 0) {
    }
    

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