私はJava(Android)を使い始めたばかりで、日付のフォーマットの問題で立ち往生しています。プロジェクト名を入力し、カレンダーで開始日を選択できる小さなフォームがあります。StartdateとProjectnameはデータベースに入力された後、事前定義されたタスクはデータベースに自動的に入力されます。
- タスク1の期日は開始日です。
- タスク2は、開始日にx日を加えたもの= DueDate2、
- タスク3は、DueDate2+x日=DueDate3です。
私は今、以下のソースコードを思いついたのですが、日付のフォーマットが間違っていることを除けば、すべてが機能します。何らかの理由で、私のフォーマットはnewDateStrで正しいのですが、それを再度解析してDateオブジェクトにすると、フォーマットが変更され、正しくありません。私は自分の間違いを見ることができません、誰かが助けることができますか?
私の理解は:
- 入力した日付の日付形式を設定します(curFormat)
- 目標の日付形式を設定する(postFormater)
- この時点で文字列である日付を解析して、日付オブジェクトに変換します(curFormatを使用)
- この日付をフォーマットして、ターゲットの日付フォーマットを取得します(postFormaterを使用)。これで、再び文字列になります。
- これをもう一度解析して、カレンダーに必要な日付に戻します
- カレンダーインスタンスsetTime(ここではフォーマットされた日付)を使用し、x日を追加します
- 日付をフォーマットして、ターゲットの日付フォーマットを取得します(postFormaterを使用)。これで、再び文字列になります。
日付オブジェクトが再度必要になるため、再度解析する必要があります。
// The format of your input date string SimpleDateFormat curFormater = new SimpleDateFormat("MM/dd/yyyy"); // The format of your target date string SimpleDateFormat postFormater = new SimpleDateFormat("dd-MM-yyyy"); // The calendar instance which adds a locale to the date Calendar cal = Calendar.getInstance(); // Parse the string (pro.getStart()) to return a Date object Date dateObj = curFormater.parse(pro.getStart()); // Format the Date dd-MM-yyyy String newDateStr = postFormater.format(dateObj); // Parse the string to return a Date object Date Startdate = postFormater.parse(newDateStr); while (cur.isAfterLast() == false) { Integer delayTime = cur.getInt(cur.getColumnIndex("DelayTime")); if (flag == false) { dateInString = Startdate; flag = true; }else{ cal.setTime(dateInString); // add the extra days cal.add(Calendar.DAY_OF_MONTH, delayTime); // Format the Date dd-MM-yyyy newDateStr = postFormater.format(cal.getTime()); // Parse the string to return a Date object dateInString = postFormater.parse(newDateStr); Log.i("newDateStr Format",newDateStr.toString()); // 29-11-2012 Log.i("dateInString parse",dateInString.toString()); // Thu Nov 29 00:00:00 GMT 2012
誰かが私の間違いを見てくれることを願っています。事前にどうもありがとうございました !