2011-08-10 2 views
0

第二EDIT:javaの0から11までのgetMonth()の日付は、データベース内の検索を混乱させますか?

// the callback received when the user "sets" the date in the dialog 
private DatePickerDialog.OnDateSetListener mDateSetListener = 
    new DatePickerDialog.OnDateSetListener() { 

    public void onDateSet(DatePicker view, int year, int monthOfYear, 
     int dayOfMonth) { 
     mYear = year; 
     mMonth = monthOfYear + 1; 
     mDay = dayOfMonth; 
     updateDisplay();  
    } 
} 

私は月に1ですが、私は比較するとき、再びそれを脱ぐことはありません:

は私の問題は、日付が日付ピッカーダイアログから設定されているかもしれない場所のように見えますデータベースのために...

編集: 私はこれをダブルチェックしました(ついにそれを得ました)。確かにthe

Date test1 = new Date(cobj.getTime().getTime()); //from the Calendar passed in 

したがって、データベースから取得された日付は正しい日付です。それは、正しく使用して表示されていても、私のダイアログから戻ってきた1:私はcobj.getTimeなどのオブジェクトを見たとき

String val = cobjstrong text.get(Calendar.MONTH) + "/" + 
     cobj.get(Calendar.DAY_OF_MONTH) + "/"+ cobj.get(Calendar.YEAR); 

は...実際に先駆け月である()getTime();。 (私が使っている日のために長い)。私が行方不明になっている他の方法や変換がありますか?

Calendarオブジェクトで.getTimeを使用しないでください(これは、DateオブジェクトのgetTimeをもう一度呼び出してからかかります)。ときには、私の最善の策は、データベースにミリ秒単位でロングを格納してから、それらを取り出してそこに日付変換を行うことです。

PRE-EDITの質問:

をだから私は、私は日付を保存してから日付を読み取ることができることを、データベースにこの日付のフィールドを持っている私は、EMを読んだとき...私は+1を追加する必要があります.getMonth()は、日付が1-12の代わりに0〜11の数値を返すためです。この問題といくつかの他のものを扱った後(例えば、.getMinutesがintを返すように、時間が5:00の場合は5:0だけが表示されますか?)、私は最終的に素晴らしい日付を表示しましたが、物事が消えた日にデータベースに問い合わせるために私は1ヶ月を推測しています。次ORMLiteのクエリを使用しているときだから、

2011年9月8日

(DD/MM/YYYY)形式の月を意味し、右照会しません。(ormliteに.qe、GreaterThanEqualに注意してください)。

public void updateDatePickerButtonUI(Calendar cobj, int widget) { 
    String val = cobj.get(Calendar.MONTH) + "/"+ cobj.get(Calendar.DAY_OF_MONTH) 
     + "/"+ cobj.get(Calendar.YEAR); 
    btnChooseDateReview.setText(val); 
    //the following just won't query correctly, its a month off 
    try { 
     //sessionDate 
     QueryBuilder<SessionsData, Integer> sb = 
      mDB.getSessionsDao().queryBuilder(); 
     sb.where().ge(SessionsData.SESSIONSDATE_ID_NAME, cobj.getTime()); 
     List<SessionsData> sessions = mDB.getSessionsDao().query(sb.prepare()); 
     for (int i = 0; i < sessions.size(); i++) { 
      try { 
       mDB.getClientsDao().refresh(sessions.get(i).getClient()); 
       mDB.getPackagesDao().refresh(sessions.get(i).getPackage()); 
      } catch (SQLException e) { 
       ... 
      } 
     } 
     theSessions = new CustomSessionReviewAdapter(mContext, 
      R.layout.session_review_row, sessions); 
     theSessions.notifyDataSetChanged(); 
     theList.setAdapter(theSessions); 
    } catch (SQLException e) { 
     ... 
    } 
} 

だから私は間違った日付を処理する必要があります、多分表示目的のために月に追加するのは正しくありませんか?何か...多分私のカレンダーオブジェクトのクエリで、私はその月の部分を0〜11か何かにすることができます。

答えて

1

私はちょっと混乱している@コードジョイです。あなたのコードで+1の参照が表示されません。私はあなたがあなたのボタンテキストの価値を構築している間にあなたは+1をしていると仮定します?

のSQLiteドライバ(2011-08-10 18:33:30.316などすなわちもの)を介して、文字列としてDateフィールドを格納し、Calendarオブジェクトへの/からの変換は正確データベースと一致しないDateを生成する場合、私は疑問に思ってORMLite。多分、ミリ秒は切り捨てられているでしょうか?ボタンの日付文字列からCalendarを作成していますか?

ほとんどの場合、あなたの問題は月間+/- 1号とは関係ありません。 getTime()メソッドは、その変換を適切に行う必要があります。

アプリをデバッグし、cobj.getTime()の返品内容を確認してmDB.getSessionsDao().queryForAll()を実行し、Dateがデータベースドライバから返されている様子をご覧ください。

+0

はい正しい仮定すべての表示はプラスです...しかし良い計画私はそれらの提案をお試しいただきありがとうございます – Codejoy

+0

さて、私はこれをもう一度チェックしました(ついにそれを得ました)。確かに、日付test1 =新しい日付(cobj.getTime()。getTime());私が選択したものより1ヶ月遅れの日付が返されます.... – Codejoy

+0

これは 'Calendar'オブジェクトの問題だとは本当に疑問です。あなたが 'Calendar'オブジェクトに戻り、それをデータベースに格納するときに、+ 1をしてボタンに行きましたが、-1をしていないのでしょうか? – Gray

関連する問題