2016-04-25 18 views
1

現在の時刻が午後6時または午後6時で、真夜中から翌朝午前6時まででない場合、ブール値isBasePriceTimeをfalseに設定します。ただし、現在の時刻がたとえば2pmの場合は、isBasePriceTimeをfalseに設定し続けます。JavaおよびAndroidスタジオで特定の時間と現在の時刻を確認する

Jodatimeを使用して
private boolean checkCurrentTimePriceType() 
{ 
    /*Get the current price type depending on the time of the day the user wants to 
     get a cab */ 

    Calendar today = Calendar.getInstance(); 
    Date currentDate = today.getTime(); 

    //creates a time for 6pm 
    String nightPriceFullTime = "18:00:00"; 
    Date nightPriceTime = java.sql.Time.valueOf(nightPriceFullTime); 
    Calendar nightPriceDateCalendar = Calendar.getInstance(); 
    nightPriceDateCalendar.setTime(nightPriceTime); 

    //creates a time for midnight 
    String nightPriceFullTimeMidnight = "00:00:00"; 
    Date nightPriceTimeMidnight = java.sql.Time.valueOf(nightPriceFullTimeMidnight); 
    Calendar nightPriceMidnightDateCalendar = Calendar.getInstance(); 
    nightPriceMidnightDateCalendar.setTime(nightPriceTimeMidnight); 

    //creates a time for 6am 
    String basePriceFullTime = "06:00:00"; 
    Date basePriceTime = java.sql.Time.valueOf(basePriceFullTime); 
    Calendar basePriceDateCalendar = Calendar.getInstance(); 
    basePriceDateCalendar.setTime(basePriceTime); 


    boolean isBasePriceTime; 

    //checks if the current time is or after 6pm, or if the the current time is between midnight and 6am 
    if(((today.getTime().after(nightPriceDateCalendar.getTime())) || (today.getTime().equals(nightPriceDateCalendar.getTime()))) 
      || ((today.getTime().before(basePriceDateCalendar.getTime())) && (today.getTime().after(nightPriceMidnightDateCalendar.getTime())))) 
    { 
     //user will pay a night time price 
     isBasePriceTime = false; 
    } 
    else 
    { 
     //user will pay a base time price 
     isBasePriceTime = true; 
    } 

    //return value of isNightPrice boolean variable 
    return isBasePriceTime; 
} 
+1

する。これは、JodatimeやJava 8と、はるかに容易になるだろうリアルタイムAPIです。また、特定のタイムゾーンを検討している場合は、実際には「現在の」時間だけを考慮することができます。 –

答えて

3

たぶん、この単純化はあなたのために動作します:

int currentHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); //Current hour 
return currentHour < 18 //False if after 6pm 
+0

の値は、時が深夜で変数currentHourに格納されるでしょうか? –

+0

深夜0時です。 – Zircon

+0

ありがとうございます。これは働いた!:) –

1

LocalTime time = new LocalTime(/* Optional but recommended: specify timezone */); 
return time.isAfter(LocalTime.of(18, 0)) 
    || time.isBefore(LocalTime.of(6, 0)); 

をするJava 8の使用:

LocalTime time = LocalTime.now(/* Optional but recommended: specify timezone */); 
return time.isAfter(LocalTime.of(18, 0)) 
    || time.isBefore(LocalTime.of(6, 0)); 

を(クラス名が同じであるが、彼らは別のパッケージからのものであることに注意してください)。

0

java.sql.Time.valueOf(nightPriceFullTime)は、January 1, 1970 18:00:00を返します。 Stringを日付に変換するには、別の方法を使用する必要があります。この変換方法を引き続き使用するには、異なるカレンダーの時間を比較する方法を変更する必要があります。たとえば:

if(nightPriceDateCalendar.get(Calendar.HOUR_OF_DAY) > today.get(Calendar.HOUR_OF_DAY) && ...){...} 

別のアプローチは、このようになります。

String time = "18:00:00"; 
SimpleDateFormat sdf = SimpleDateFormat("yyyy/MM/dd"); 
String onlyDate = sdf.format(new Date()); 
sdf = SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
Date dateAndTime = sdf.parse(onlyDate+" "+time); 

Calendar nightPriceDateCalendar = Calendar.getInstance(); 
nightPriceDateCalendar.setTime(dateAndTime); 
関連する問題