首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android环境下AM/PM时间的比较

Android环境下AM/PM时间的比较
EN

Stack Overflow用户
提问于 2014-09-17 12:02:47
回答 5查看 5.7K关注 0票数 2

我有个方案

代码语言:javascript
复制
start-time = 4:15 PM
end-time = 2:00 AM 

如果我的current-time (假设晚上9:15以与开始或结束时间相同的格式)介于start-timeend-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

密码:

代码语言:javascript
复制
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;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-09-17 12:43:56

步骤1:,您只需将一天添加到您的结束时间,当它低于您的开始时间。

步骤2: 应用条件检查当前时间是否介于开始时间和结束时间之间

代码语言:javascript
复制
    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
    }
票数 8
EN

Stack Overflow用户

发布于 2014-09-17 12:12:33

试试这个:

代码语言:javascript
复制
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
}
票数 4
EN

Stack Overflow用户

发布于 2014-09-21 05:19:43

使用不带日期或时区的只支持时间值的日期时间库.

在Java世界中,我们有两个很好的日期库:尤达-时间和java.time (由JSR 310定义,与Java 8捆绑在一起,灵感来自Joda-Time )。两个库都提供了一个LocalTime类。

尤达-时间

下面是一些Joda-Time2.4中的未测试的代码,以使您朝着正确的方向前进。

代码语言:javascript
复制
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.
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25890072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档