2013-01-01 16 views
6

私には、StartTimeとEndTimeのような2つの文字列変数があります。 StartTimeでEndTimeを引いてTotalTimeを計算する必要があります。時間とミンス形式でAndroidで2回の差分を計算する

StartTime = "08:00 AM"; 
EndTime = "04:00 PM"; 

TOTALTIMEを次のようによう

のStartTimeと終了時間のフォーマットです。 Androidでこれを計算する方法は?

+0

持続クラスは、Androidで、この場合に便利です:http://stackoverflow.com/a/12739537/693752 – Snicolas

答えて

27

下記のコードを試してください。

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); 
date1 = simpleDateFormat.parse("08:00 AM"); 
date2 = simpleDateFormat.parse("04:00 PM"); 

long difference = date2.getTime() - date1.getTime(); 
days = (int) (difference/(1000*60*60*24)); 
hours = (int) ((difference - (1000*60*60*24*days))/(1000*60*60)); 
min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours))/(1000*60); 
hours = (hours < 0 ? -hours : hours); 
Log.i("======= Hours"," :: "+hours); 

出力 - 時間:: 8

+0

ちょっと感謝私の開始時間は午後12時30分、終了時間は午後1時だった。私はそれに "HH:mm a"という形式を与えていますが、その差はまだ負です。 Althogh終了時刻が開始時刻よりも大きい。 – Munazza

+0

日付も文字列で指定する必要がありますか? – Munazza

+0

1:00 PMの代わりに01:00 PMを使用し、何が起こったか試してみてください。 –

3

DateFormatを見てください、あなたはパース(文字列のソース)メソッドを使用して文字列を解析するために使用することができ、あなたは簡単に2つのDateを操作することができますあなたが望むものを得るためのオブジェクト。日付を表示する

DateFormat df = DateFormat.getInstance(); 
Date date1 = df.parse(string1); 
Date date2 = df.parse(string2); 
long difference = date1.getTime() - date2.getTime(); 

days = (int) (difference/(1000*60*60*24)); 
hours = (int) ((difference - (1000*60*60*24*days))/(1000*60*60)); 
min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours))/(1000*60); 

String diffHours = df.format(hours); 
日差については

Date myDate = new Date(difference); 

:修正されたコードとして以下:

String diff = df.format(myDate); 
0

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); 

    try { 
     date1 = simpleDateFormat.parse("08:00 AM"); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    try { 
     date2 = simpleDateFormat.parse("04:00 PM"); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    long difference = date2.getTime() - date1.getTime(); 
    int days = (int) (difference/(1000 * 60 * 60 * 24)); 
    int hours = (int) ((difference - (1000 * 60 * 60 * 24 * days))/(1000 * 60 * 60)); 
    int min = (int) (difference - (1000 * 60 * 60 * 24 * days) - (1000 * 60 * 60 * hours)) 
      /(1000 * 60); 
    hours = (hours < 0 ? -hours : hours); 
    Log.i("======= Hours", " :: " + hours); 
2

....これを試してみてください。これはChirag Ravalによって提供されます。これは、Chirag p 22:00〜07:00に時間を見つけようとするといくつか問題がありました。

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); 
Date startDate = simpleDateFormat.parse("22:00"); 
Date endDate = simpleDateFormat.parse("07:00"); 

long difference = endDate.getTime() - startDate.getTime(); 
if(difference<0) 
{ 
    Date dateMax = simpleDateFormat.parse("24:00"); 
    Date dateMin = simpleDateFormat.parse("00:00"); 
    difference=(dateMax.getTime() -startDate.getTime())+(endDate.getTime()-dateMin.getTime()); 
} 
int days = (int) (difference/(1000*60*60*24)); 
int hours = (int) ((difference - (1000*60*60*24*days))/(1000*60*60)); 
int min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours))/(1000*60); 
Log.i("log_tag","Hours: "+hours+", Mins: "+min); 

結果は次のようになります。営業時間:9、ミンス:0

0
Try simple piece of code using For 24 hour time 
StartTime = "10:00"; 
EndTime = "13:00"; 
here starthour=10 and end hour=13 
if(TextUtils.isEmpty(txtDate.getText().toString())||TextUtils.isEmpty(txtDate1.getText().toString())||TextUtils.isEmpty(txtTime.getText().toString())||TextUtils.isEmpty(txtTime1.getText().toString())) 
    { 
     Toast.makeText(getApplicationContext(), "Date/Time fields cannot be blank", Toast.LENGTH_SHORT).show(); 
    } 
    else { 
     if (starthour > endhour) { 
      Toast.makeText(getApplicationContext(), "Start Time Should Be Less Than End Time", Toast.LENGTH_SHORT).show(); 
     } else if (starthour == endhour) { 
      if (startmin > endmin) { 
       Toast.makeText(getApplicationContext(), "Start Time Should Be Less Than End Time", Toast.LENGTH_SHORT).show(); 
      } 
      else{ 
       tvalid = "True"; 
      } 
     } else { 
      // Toast.makeText(getApplicationContext(),"Sucess"+(endhour-starthour)+(endmin-startmin),Toast.LENGTH_SHORT).show(); 
      tvalid = "True"; 
     } 
    } 
same for date also 
関連する問題