2016-04-25 114 views
1

如果当前时间等于下午6点或下午6点之后,并且不在午夜和上午6点之间,我想设置boolean值isBasePriceTime为false。但是,如果一天中的当前时间是例如2pm,它会一直将isBasePriceTime设置为false。在Java和Android Studio中根据特定时间检查当前时间

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

使用Jodatime:

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); 
相关问题