关于判断当前时间是否在设定时间范围内

时间:2021-12-25 17:19:21
开始时间和结束时间都是可以手工随意设定的(范围0到24内的整数),
比如开始时间晚上10点,结束时间早上8点。
要求判断系统当前时间是否在设定时间范围内。

比如:
int start=22;
int end=8;
Carlendar now=Carlendar.getInstance();
因为开始结束时间有很多种关系,弄了半天了还没搞定,
不知道大家有没有遇到过类似问题。

18 个解决方案

#1


该回复于2015-05-26 11:13:56被管理员删除

#2


直接用date的方法,直接就可以判断的,

#3


既然开始时间和结束时间都是整数,所谓的很多种关系是什么?
  Calendar now=Calendar.getInstance();
     小时:   now.get(Calendar.HOUR_OF_DAY);
     分钟:   now.get(Calendar.MINUTE);
直接作比较不是很麻烦啊

#4


boolean Date.after(Date when) 
          测试此日期是否在指定日期之后。 
 boolean Date.before(Date when) 
          测试此日期是否在指定日期之前。 
你看一下API

#5



你这个需求有问题,你只输入数字,而且还可能隔天,那你比如开始时间晚上10点,结束时间早上8点是说当太难晚上10点开始呢,是昨天晚上10点开始??只有清楚了这个才能做。

#6


看来大家没理解我的意思。
我也知道Date类有比较方法的。但是得先把开始结束时间转换成日期类型才能比较啊
问题就在这里,只有小时设定怎么转换呢,今天还是明天?给大家看看我现在的代码吧,是有bug的
public static boolean isServiceOut() {

boolean rtn = false;

int nBegin = PropertiesUtils.getInstance().getServiceOutBegin();
int nEnd = PropertiesUtils.getInstance().getServiceOutEnd();

Calendar cNow = Calendar.getInstance();
Calendar cBegin = Calendar.getInstance();
Calendar cEnd = Calendar.getInstance();

cBegin.set(Calendar.HOUR_OF_DAY, nBegin); //24H
cBegin.set(Calendar.MINUTE, 0);
cBegin.set(Calendar.SECOND, 0);
cBegin.set(Calendar.MILLISECOND, 0);

cEnd.set(Calendar.HOUR_OF_DAY, nEnd); //24H
cEnd.set(Calendar.MINUTE, 0);
cEnd.set(Calendar.SECOND, 0);
cEnd.set(Calendar.MILLISECOND, 0);

//終わり時間<開始時間の場合、終わり時間を翌日にする
if (nEnd < nBegin) {
cEnd.add(Calendar.DAY_OF_MONTH, 1);
}

        if (cNow.get(Calendar.HOUR_OF_DAY) < 12) {
            cNow.add(Calendar.DAY_OF_MONTH, 1);
        }
        
Date now = cNow.getTime();
Date begin = cBegin.getTime();
Date end = cEnd.getTime();

//時間帯判定
if (now.compareTo(begin) > 0 && now.compareTo(end) < 0) {
rtn = true;
}
        
return rtn;
}

#7


这是第一种方法,

/**
 * 判断给定时间在否在给定两个时间之前
 */
public static void do7(String star,String end){
SimpleDateFormat localTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try{
Date sdate = localTime.parse(star);
Date edate=localTime.parse(end);
long time = System.currentTimeMillis();
System.out.println(time+"##"+sdate.getTime()+"##"+edate.getTime());
if(time>=sdate.getTime()&& time<=edate.getTime()){
System.out.println("true");
}
}catch(Exception e){}
}

#8


太强了吧,还是给日本做的项目啊,都日语注释

#9


把所有时间都转换为相对时间,也就是long型的数值,然后比大小即可

#10


你这种需求让我想起了网吧通宵
呵呵
now.get(Calendar.HOUR_OF_DAY);
只要这个数大于8小于22就不满足条件

#11


这是第二种方法

public static void do8(String star,String end){
SimpleDateFormat localTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try{
Date sdate = localTime.parse(star);
Date edate=localTime.parse(end);
long time = System.currentTimeMillis();
Date date=new Date();
System.out.println(time+"##"+sdate.getTime()+"##"+edate.getTime());
if(date.after(sdate)&& date.before(edate)){
System.out.println("true");
}
}catch(Exception e){}
}

#12


上面方法没有去掉多余的,呵呵,

public static void do8(String star,String end){
SimpleDateFormat localTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try{
Date sdate = localTime.parse(star);
Date edate=localTime.parse(end);
Date date=new Date();
System.out.println(sdate.getTime()+"##"+sdate.getTime()+"##"+edate.getTime());
if(date.after(sdate)&& date.before(edate)){
System.out.println("true");
}
}catch(Exception e){}
}

#13


哦,之前没有好好理解楼主的意思,那楼主说一下从开始到结束间隔的最长时间是多少???

#14


to :rascalboy520 
你的解决方案里面参数跟我的不一样,我的入力参数只有小时,范围0到24的整数

to:lovingprince 
式样没有问题,开始结束时间都必须是范围0到24的整数。

#15


引用 14 楼 sunlm78 的回复:
to :rascalboy520 
你的解决方案里面参数跟我的不一样,我的入力参数只有小时,范围0到24的整数 

to:lovingprince 
式样没有问题,开始结束时间都必须是范围0到24的整数。


问题是你说开始时间是22点,结束时间是8点,我想问的是你开始的时间22点从当天算起,还是昨天晚上的22点算起。

#16


to:lovingprince 
》问题是你说开始时间是22点,结束时间是8点,我想问的是你开始的时间22点从当天算起,还是昨天晚上的22点算起。
很明显要看系统当前时间,如果现在是晚上23点,那么开始时间就是当天22点,如果现在是早上6点,那么开始时间就是昨天晚上22点。

#17


顶一下

#18


没人来帮忙吗

#1


该回复于2015-05-26 11:13:56被管理员删除

#2


直接用date的方法,直接就可以判断的,

#3


既然开始时间和结束时间都是整数,所谓的很多种关系是什么?
  Calendar now=Calendar.getInstance();
     小时:   now.get(Calendar.HOUR_OF_DAY);
     分钟:   now.get(Calendar.MINUTE);
直接作比较不是很麻烦啊

#4


boolean Date.after(Date when) 
          测试此日期是否在指定日期之后。 
 boolean Date.before(Date when) 
          测试此日期是否在指定日期之前。 
你看一下API

#5



你这个需求有问题,你只输入数字,而且还可能隔天,那你比如开始时间晚上10点,结束时间早上8点是说当太难晚上10点开始呢,是昨天晚上10点开始??只有清楚了这个才能做。

#6


看来大家没理解我的意思。
我也知道Date类有比较方法的。但是得先把开始结束时间转换成日期类型才能比较啊
问题就在这里,只有小时设定怎么转换呢,今天还是明天?给大家看看我现在的代码吧,是有bug的
public static boolean isServiceOut() {

boolean rtn = false;

int nBegin = PropertiesUtils.getInstance().getServiceOutBegin();
int nEnd = PropertiesUtils.getInstance().getServiceOutEnd();

Calendar cNow = Calendar.getInstance();
Calendar cBegin = Calendar.getInstance();
Calendar cEnd = Calendar.getInstance();

cBegin.set(Calendar.HOUR_OF_DAY, nBegin); //24H
cBegin.set(Calendar.MINUTE, 0);
cBegin.set(Calendar.SECOND, 0);
cBegin.set(Calendar.MILLISECOND, 0);

cEnd.set(Calendar.HOUR_OF_DAY, nEnd); //24H
cEnd.set(Calendar.MINUTE, 0);
cEnd.set(Calendar.SECOND, 0);
cEnd.set(Calendar.MILLISECOND, 0);

//終わり時間<開始時間の場合、終わり時間を翌日にする
if (nEnd < nBegin) {
cEnd.add(Calendar.DAY_OF_MONTH, 1);
}

        if (cNow.get(Calendar.HOUR_OF_DAY) < 12) {
            cNow.add(Calendar.DAY_OF_MONTH, 1);
        }
        
Date now = cNow.getTime();
Date begin = cBegin.getTime();
Date end = cEnd.getTime();

//時間帯判定
if (now.compareTo(begin) > 0 && now.compareTo(end) < 0) {
rtn = true;
}
        
return rtn;
}

#7


这是第一种方法,

/**
 * 判断给定时间在否在给定两个时间之前
 */
public static void do7(String star,String end){
SimpleDateFormat localTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try{
Date sdate = localTime.parse(star);
Date edate=localTime.parse(end);
long time = System.currentTimeMillis();
System.out.println(time+"##"+sdate.getTime()+"##"+edate.getTime());
if(time>=sdate.getTime()&& time<=edate.getTime()){
System.out.println("true");
}
}catch(Exception e){}
}

#8


太强了吧,还是给日本做的项目啊,都日语注释

#9


把所有时间都转换为相对时间,也就是long型的数值,然后比大小即可

#10


你这种需求让我想起了网吧通宵
呵呵
now.get(Calendar.HOUR_OF_DAY);
只要这个数大于8小于22就不满足条件

#11


这是第二种方法

public static void do8(String star,String end){
SimpleDateFormat localTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try{
Date sdate = localTime.parse(star);
Date edate=localTime.parse(end);
long time = System.currentTimeMillis();
Date date=new Date();
System.out.println(time+"##"+sdate.getTime()+"##"+edate.getTime());
if(date.after(sdate)&& date.before(edate)){
System.out.println("true");
}
}catch(Exception e){}
}

#12


上面方法没有去掉多余的,呵呵,

public static void do8(String star,String end){
SimpleDateFormat localTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try{
Date sdate = localTime.parse(star);
Date edate=localTime.parse(end);
Date date=new Date();
System.out.println(sdate.getTime()+"##"+sdate.getTime()+"##"+edate.getTime());
if(date.after(sdate)&& date.before(edate)){
System.out.println("true");
}
}catch(Exception e){}
}

#13


哦,之前没有好好理解楼主的意思,那楼主说一下从开始到结束间隔的最长时间是多少???

#14


to :rascalboy520 
你的解决方案里面参数跟我的不一样,我的入力参数只有小时,范围0到24的整数

to:lovingprince 
式样没有问题,开始结束时间都必须是范围0到24的整数。

#15


引用 14 楼 sunlm78 的回复:
to :rascalboy520 
你的解决方案里面参数跟我的不一样,我的入力参数只有小时,范围0到24的整数 

to:lovingprince 
式样没有问题,开始结束时间都必须是范围0到24的整数。


问题是你说开始时间是22点,结束时间是8点,我想问的是你开始的时间22点从当天算起,还是昨天晚上的22点算起。

#16


to:lovingprince 
》问题是你说开始时间是22点,结束时间是8点,我想问的是你开始的时间22点从当天算起,还是昨天晚上的22点算起。
很明显要看系统当前时间,如果现在是晚上23点,那么开始时间就是当天22点,如果现在是早上6点,那么开始时间就是昨天晚上22点。

#17


顶一下

#18


没人来帮忙吗