我有个方案
start-time = 4:15 PM
end-time = 2:00 AM 如果我的current-time (假设晚上9:15以与开始或结束时间相同的格式)介于start-time和end-time之间,那么goto screen 1是其他明智的goto screen 2
我的问题是如何比较current-time更大或等于‘开始时间’和更少或等于‘结束时间’。我尝试过将给定的时间值转换为milliseconds并进行比较,但current-time = 9:15 PM似乎大于“结束时间= 2:00 AM”,因为2:00的时间将在午夜后到来,如果‘9:15下午=周四,那么2:00将是星期五’。我找了很多东西,但还是想不出来。任何类型的帮助都将不胜感激。
编辑:
当前时间、启动时间和结束时间--所有被视为String的值
编辑2
密码:
long currentTime = getMillis("9:15 PM");
long startTime = getMillis("4:15 PM");
long endTime = getMillis("2:00 AM");//this will be the next day's time confusing part for me
if(currentTime >= startTime && currentTime <= endTime)
{
//goto screen 1
}
else
{
// goto screen 2
}
private long getMillis(String givenTime)
{
SimpleDateFormat sdf = new SimpleDateFormat("h:mm a");
try {
Date mDate = sdf.parse(givenTime);
long timeInMilliseconds = mDate.getTime();
System.out.println("Date in milli :: " + timeInMilliseconds);
return timeInMilliseconds;
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}发布于 2014-09-17 12:43:56
步骤1:,您只需将一天添加到您的结束时间,当它低于您的开始时间。
步骤2: 应用条件检查当前时间是否介于开始时间和结束时间之间
try {
Date mToday = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");
String curTime = sdf.format(mToday);
Date start = sdf.parse("4:15 PM");
Date end = sdf.parse("2:00 AM");
Date userDate = sdf.parse(curTime);
if(end.before(start))
{
Calendar mCal = Calendar.getInstance();
mCal.setTime(end);
mCal.add(Calendar.DAY_OF_YEAR, 1);
end.setTime(mCal.getTimeInMillis());
}
Log.d("curTime", userDate.toString());
Log.d("start", start.toString());
Log.d("end", end.toString());
if (userDate.after(start) && userDate.before(end)) {
Log.d("result", "falls between start and end , go to screen 1 ");
}
else{
Log.d("result", "does not fall between start and end , go to screen 2 ");
}
} catch (ParseException e) {
// Invalid date was entered
}发布于 2014-09-17 12:12:33
试试这个:
Date dt = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");
String curTime = sdf.format(dt);
Date start = parser.parse("4:15 PM");
Date end = parser.parse("2:00 AM");
try {
Date userDate = parser.parse(curTime);
if (userDate.after(start)){
....
//you can have your if...else if... conditions
}
if(userDate.before(end)) {
....
}
} catch (ParseException e) {
// Invalid date was entered
}发布于 2014-09-21 05:19:43
使用不带日期或时区的只支持时间值的日期时间库.
在Java世界中,我们有两个很好的日期库:尤达-时间和java.time (由JSR 310定义,与Java 8捆绑在一起,灵感来自Joda-Time )。两个库都提供了一个LocalTime类。
尤达-时间
下面是一些Joda-Time2.4中的未测试的代码,以使您朝着正确的方向前进。
String inputStart = "4:15 PM";
String inputStop = "2:00 AM";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "h:mm a" );
LocalTime start = formatter.parseLocalTime( inputStart );
LocalTime stop = formatter.parseLocalTime( inputStop );
String now = LocalTime.now( DateTimeZone.forID( "America/Montreal" ) );
boolean isNowInRange = false;
if( start.isEqual( stop ) ) {
isNowInRange = ( now.isEqual( start ) );
} else if ( start.isBefore( stop ) ) {
isNowInRange = ( ( now.isEqual( start ) || now.isAfter( start ) ) && now.isBefore( stop ) );
} else if ( start.isAfter( stop ) ) {
isNowInRange = ( ( now.isEqual( start ) || now.isAfter( start ) ) || now.isBefore( stop ) );
} else {
// FIXME: Handle this supposedly impossible case.
}https://stackoverflow.com/questions/25890072
复制相似问题