0

私はJava(Android)を使い始めたばかりで、日付のフォーマットの問題で立ち往生しています。プロジェクト名を入力し、カレンダーで開始日を選択できる小さなフォームがあります。StartdateとProjectnameはデータベースに入力された後、事前定義されたタスクはデータベースに自動的に入力されます。

  • タスク1の期日は開始日です。
  • タスク2は、開始日にx日を加えたもの= DueDate2、
  • タスク3は、DueDate2+x日=DueDate3です。

私は今、以下のソースコードを思いついたのですが、日付のフォーマットが間違っていることを除けば、すべてが機能します。何らかの理由で、私のフォーマットはnewDateStrで正しいのですが、それを再度解析してDateオブジェクトにすると、フォーマットが変更され、正しくありません。私は自分の間違いを見ることができません、誰かが助けることができますか?

私の理解は:

  1. 入力した日付の日付形式を設定します(curFormat)
  2. 目標の日付形式を設定する(postFormater)
  3. この時点で文字列である日付を解析して、日付オブジェクトに変換します(curFormatを使用)
  4. この日付をフォーマットして、ターゲットの日付フォーマットを取得します(postFormaterを使用)。これで、再び文字列になります。
  5. これをもう一度解析して、カレンダーに必要な日付に戻します
  6. カレンダーインスタンスsetTime(ここではフォーマットされた日付)を使用し、x日を追加します
  7. 日付をフォーマットして、ターゲットの日付フォーマットを取得します(postFormaterを使用)。これで、再び文字列になります。
  8. 日付オブジェクトが再度必要になるため、再度解析する必要があります。

    // 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
    

誰かが私の間違いを見てくれることを願っています。事前にどうもありがとうございました !

4

2 に答える 2

0

Calendarループするたびに文字列に変換し続けないでください。1つを維持し、遅延を所定の位置に累積します...

SimpleDateFormat fmt = new SimpleDateFormat("dd-MM-yyyy");
Calendar cal = Calendar.getInstance();

// Set the date once
cal.setTime(fmt.parse(pro.getStart()));

while(!cur.isAfterLast()) {
    // Accumulate additional days
    Integer delayTime = cur.getInt(cur.getColumnIndex("DelayTime"));
    cal.add(Calendar.DAY_OF_MONTH, delayTime);
}

String endDate = fmt.format(cal.getTime());
于 2012-11-26T16:55:28.027 に答える
0

オブジェクトには、そのjava.util.Dateオブジェクトにフォーマットが含まれておらず、解析に使用したフォーマットのメモリもありません。そのtoStringメソッドの出力、つまり出力として取得するものはdateInString.toString()、常に、表示されているデフォルトのJDK形式になります。Thu Nov 29 00:00:00 GMT 2012

表示するときはいつでも、フォーマッタを使用してフォーマットされた文字列に変換する必要があります。言うまでもなく、「Dateオブジェクトをフォーマット」することはできません。(UIフレームワークには、これを自動的に行うための機能が組み込まれている傾向があります。)

于 2012-11-26T17:00:29.153 に答える