2011-07-09 11 views
1

私は、文字列は、データベースに格納されている(例:Sat Jul 09 14:20:31 EDT 2011)の日付オブジェクトにSQL DBから日付形式のストリングを変換のJava - 比較

これは文字列として保存されている(私は、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の種子が間違っていると思います。

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

「M」は、潜在的に一桁の値であり、例えば:インサイトおくる

+0

例外は次のとおりです。解析しようとしている文字列が、設定したパターンと一致しません。 SimpleDateFormatドキュメンテーションを再訪し、いくつか試してみてください。それは問題です。 – SJuan76

答えて

6

私はあなたがちょうどあなたのフォーマット文字列に「M」を「MMM」を変更する必要があると考えています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) { 
} 

私も日付のJoda Timeを使用することをお勧めしたい/タイムデータベースに日付/時刻データをテキストとして保存するのを避けるためには、次のようにします。

+0

http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.htmlを参照してください:抜粋:**通常、パターン・レターは数字が正確なプレゼンテーションを決定するため繰り返されます。* * EEE MMM dd HH:mm:ss zzz yyyyのようなものかもしれません。 – home

+0

ありがとう、これは働いた!第二の目が必要でありがとう! – CQM

+0

+1のJoda時間の提案。これは本当にもっとマインドシェアが必要です。もちろん、Jodaは同じ書式の文字列を使用しているため、どちらの場合でも問題はあります。 :) –

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