2012-04-25 9 views
10

(のJava/Androidの)2つの日付間の日数を計算し、特定の形式で結果を提示し、私は次のように2つの日付の間の日数を計算やろうとしています

  1. は、現在の日付を取得し
  2. 入手過去や未来日付
  3. いいえ。 1およびno。 2
  4. 現在、次の形式
    • の日付結果は(2日間で)(2日前)過去や未来に
    • フォーマット意志である場合:日、週、月、年

私はさまざまな方法を試しましたが、上記の結果が得られませんでした。私はを見つけました。DatePickerダイアログボックスの日付を整数に変換します。 DatePicketウィジェットが整数ではなく日付変数を返すようにする方法が見つかりませんでした。

private DatePickerDialog.OnDateSetListener mDateSetListener = 
     new DatePickerDialog.OnDateSetListener() { 

      public void onDateSet(DatePicker view, **int** year, 
            **int** monthOfYear, **int** dayOfMonth) { 
       enteredYear = year; 
       enteredMonth = monthOfYear; 
       enteredDay = dayOfMonth; 
      } 
     }; 

2つの日付の間の日数を計算しようとしたとき、私は上記に基づいて、整数にシステムの日付を変換しようとしたが、これは実際には動作しません。ここから

private void getSystemDate(){ 
    final Calendar c = Calendar.getInstance(); 

     mYear = c.get(Calendar.YEAR); 
     systemYear = mYear; 

     mMonth = c.get(Calendar.MONTH); 
     systemMonth = mMonth + 1; 

     mDay = c.get(Calendar.DAY_OF_MONTH); 
     systemDay = mDay; 

} 
+0

差分は計算できませんe日間。あなたは長い(AedonEtLIRAのように)使用する必要があります。 – jahroy

+0

これは私が抱えている問題です。デフォルトでは、AndroidのDatePickerは日付を整数に変換しています(上のコードスニペットを参照)。 – striders

+0

intを使って日付を表現する方法はすぐにわかりません。 Androidのjavaが異なる場合を除き、max int値が十分に大きくないため、タイムスタンプをintとして表すことはできません。タイムスタンプは非常に大きく...数兆と数兆もあります。 – jahroy

答えて

15
/** 
    * Returns a string that describes the number of days 
    * between dateOne and dateTwo. 
    * 
    */ 

public String getDateDiffString(Date dateOne, Date dateTwo) 
{ 
    long timeOne = dateOne.getTime(); 
    long timeTwo = dateTwo.getTime(); 
    long oneDay = 1000 * 60 * 60 * 24; 
    long delta = (timeTwo - timeOne)/oneDay; 

    if (delta > 0) { 
     return "dateTwo is " + delta + " days after dateOne"; 
    } 
    else { 
     delta *= -1; 
     return "dateTwo is " + delta + " days before dateOne"; 
    } 
} 

編集: how to calculate difference between two dates using java

EDIT2:ちょうど別のスレッドで同じ質問を見た

int year = delta/365; 
int rest = delta % 365; 
int month = rest/30; 
rest = rest % 30; 
int weeks = rest/7; 
int days = rest % 7; 
+0

情報をありがとう!これにより、日差を表示します。日、週、および年にこれを表示する適切な方法は何でしょうか? – striders

+0

いくつかの数学を実行し、モジュロ演算子を使用する必要があります。 x秒を分と秒で表示するには、次のようにします。int minutes = x/60; int seconds = x%60;文字列timeText =分+ "分" +秒+ "秒";パーセント記号はモジュロ演算子と呼ばれます。 – jahroy

+0

@striders私の答えを更新しました...あなたが正しいと思ったら答えを受け入れてください。 – San

1
long delta = Date2.getTime() - Date1.getTime(); 

new Date(delta); 

、あなたは自分の形式を選択します。たぶん、日付フォーマッタを使用しますか?将来の事柄やそのすべてを判断する上で、デルタが肯定的であるか否定的であるかを見ることができます。負のデルタは、過去のイベントを示します。

+1

デルタは1970年1月1日00:00:00 GMTからのミリ秒ではないため、新しい日付(デルタ)は機能しません。 – San

1

まあ、Javaの/:このような何かを、年/月/週を取得するにはアンドロイドAPIにはすべての回答があります:

Calendar myBirthday=Calendar.getInstance(); 
    myBirthday.set(1980, Calendar.MARCH, 22); 
    Calendar now = Calendar.getInstance(); 
    long diffMillis= Math.abs(now.getTimeInMillis()-myBirthday.getTimeInMillis()); 
    long differenceInDays = TimeUnit.DAYS.convert(diffMillis, TimeUnit.MILLISECONDS); 
関連する問題