前言

项目中有需求是实现类似与手机中勿扰模式的逻辑,判断当前时间点是否属于指定时间段(24H)。

实现思路

获取当前时间、开始时间、结束时间的小时数hour、分钟数minute

首先比较hour,

i. endHour > startHour,即结束时间在开始时间之后,说明这个时间段的起止时间都在同一天。

ii. endHour < startHour,即结束时间在开始时间之前,说明这个时间段是从今天开始,明天结束。

a. 若当前日期在startHour之后 || 当前日期在endHour之前,返回true

b. 否则返回false

iii. endHour = startHour,如果开始时间与结束时间小时数一样,就需要比较分钟数了,与比较小时数同理。

/*

* 判断当前时间是否在设置的dark mode时间段内

* @param date1: 开始时间(hh:mm)

* @param date2: 结束时间(hh:mm)

*/

private boolean isBelongPeriodTime(String date1, String date2){

SimpleDateFormat df = new SimpleDateFormat("HH:mm");

Date currentTime = new Date(System.currentTimeMillis());

Date startTimeDate;

Date endTimeDate;

Calendar date = Calendar.getInstance();

Calendar begin = Calendar.getInstance();

Calendar end = Calendar.getInstance();

try{

date.setTime(df.parse(df.format(currentTime)));

startTimeDate = df.parse(date1);

endTimeDate = df.parse(date2);

begin.setTime(startTimeDate);

end.setTime(endTimeDate);

if (endTimeDate.getHours() < startTimeDate.getHours()) {

if (date.after(begin) || date.before(end)) {

Log.d(TAG, "current time is belong to " + date1 + " - " + date2);

return true;

}else {

Log.d(TAG, "current time isn't belong to " + date1 + " - " + date2);

return false;

}

}else if(endTimeDate.getHours() == startTimeDate.getHours()){

if (endTimeDate.getMinutes() < startTimeDate.getMinutes()) {

if (date.after(begin) || date.before(end)) {

Log.d(TAG, "current time is belong to " + date1 + " - " + date2);

return true;

}else {

Log.d(TAG, "current time isn't belong to " + date1 + " - " + date2);

return false;

}

}

}

}catch(ParseException e){

e.printStackTrace();

}

//这里是时间段的起止都在同一天的情况,只需要判断当前时间是否在这个时间段内即可

if (date.after(begin) && date.before(end)) {

Log.d(TAG, "current time is belong to " + date1 + " - " + date2);

return true;

}else {

Log.d(TAG, "current time isn't belong to " + date1 + " - " + date2);

return false;

}

}

记个Date的after()方法应用,以后复制用

/*

** 判断当前时间是否在传入的时间之后

*/

private boolean isAfterTime(String time){

SimpleDateFormat df = new SimpleDateFormat("HH:mm");

Date currentTime = new Date(System.currentTimeMillis());

Calendar curTime = Calendar.getInstance();

Calendar scaTime = Calendar.getInstance();

try{

Date timeScale = df.parse(time);

curTime.setTime(df.parse(df.format(currentTime)));

scaTime.setTime(timeScale);

}catch (ParseException e){

e.printStackTrace();

}

if (curTime.after(scaTime)) {

return true;

}else {

return false;

}

}

时间 java 时间段_Java 如何判断当前时间是否在指定时间段内相关推荐

  1. 判断一个点是否在指定三角形内(1)

    问题:判断点P是否在三角形ABC内 判断一个点是否在在三角形内,最常用的两种方法:面积法.向量同向法.算法虽然很简单,但要做到高效却不容易,要考虑到二维.三维的区别,还要考虑到坐标是用浮点数还是用整数 ...

  2. java 判断时间先后顺序_java怎样判断下面的日期的先后

    展开全部 Java判段两个日期的先后,方法e69da5e6ba9062616964757a686964616f31333363376466如下:import java.util.Date; impor ...

  3. java 时间加减_java如何实现当前时间加减30分钟的方法

    java如何实现当前时间加减30分钟的方法 发布时间:2020-08-17 09:41:34 来源:亿速云 阅读:280 作者:小新 这篇文章主要介绍java如何实现当前时间加减30分钟的方法,文中介 ...

  4. java 微秒_Java中的当前时间(以微秒为单位)

    慕勒3428872 Java 9和更高版本:捕获当前时刻时,分辨率高达纳秒.那是9位数的小数.Instant.now()   2017-12-23T12:34:56.123456789Z要限制为微秒, ...

  5. java list 时间排序吗_java中的list时间排序

    最初设想使用:时间long型 private void testTimes() throws InterruptedException{ Calendar cal=Calendar.getInstan ...

  6. java 获取当前hhmm_java 判断当前时间符合cron时间表达式_J2SE_Java

    public class OrderExceptionQuartz { private static Logger logger = LoggerFactory.getLogger(OrderExce ...

  7. java整除_java编程判断一个整数能否被9整除

    展开全部 1.可以使用下面这个表达式来进行计算62616964757a686964616fe4b893e5b19e31333431333962 if(n%9==0){ System.out.print ...

  8. java 取文本中间_Java 如何利用正则表达式提取两个指定标记符号之间的字符串内容...

    Java 开发中,我们往往需要从非结构化的文本数据中截取两个特定字符之间的内容,可以利用正则表达式获取其间信息. 解决方法 将正则表达式用 Pattern 类的静态方法 compile 一个对象,该对 ...

  9. java int数组任何数之间间隔不能对于指定数,内付极速排序

    public static void main(String[] args) {int []arr = {300,310, 210,313,334,360,255,233,275,274,410,51 ...

  10. java程序如何获取北京时间_计算当前的北京时间java(currentTimeMillis)

    计算当前的北京时间java(currentTimeMillis) 计算当前的北京时间java(currentTimeMillis) 当前北京时间 编写一个显示当前GMT时间的程序,该时间的格式为小时: ...

最新文章

  1. Unity安卓游戏开发:打造7款2D 3D游戏 Unity Android Game Development : Build 7 2D 3D Games
  2. 中国无人机“老炮儿”回忆录
  3. 112. 雷达设备【贪心】
  4. json loads No JSON object could be decoded 问题解决
  5. 开源资产管理系统_开源cmdb来啦 通用CMDB 开源资产管理系统
  6. FIFO的verilog代码
  7. android提交项目到svn,Android Studio 配置SVN,通过Share project提交项目和实现忽略文件...
  8. oracle数据库存储ip地址,oracle – 以十进制形式存储的IP地址 – PL / SQL以虚线四边形显示...
  9. matlab哈宁低通,Matlab实现电网谐波测量加窗插值算法.pdf
  10. 计算机系统结构开设学校,计算机系统结构专业介绍及考研院校排名
  11. Netty服务器无限循环给客户端发送数据
  12. 【LeetCode】【数组】题号:485,最大连续1的个数
  13. ROS中使用A星算法进行路径规划
  14. 演示固态硬盘装win11系统教程
  15. 卡贴机被“全面封杀”?苹果关闭有锁iPhone的ICCID激活服务
  16. 我的U盘也不见了 (搞笑版,笑死我了)
  17. linux mint软件包,在Linux Mint上安装R软件包的问题18.1
  18. MySQL InnoDB如何解决幻读?
  19. 天才小毒妃 第973章 韩芸汐,救我
  20. 江苏大学毕业设计TEX排版(二)

热门文章

  1. CSS 3之网页背景颜色
  2. “the+形容词”的四种类型及语法特征
  3. android 图片字体涂鸦,android 实现在照片上绘制涂鸦的方法
  4. CPU的内部架构和工作原理(简介)
  5. 正常高、大地高、海拔高的测绘概念
  6. renderdoc 抓google地图
  7. 信息系统项目管理师-常见计算题考点汇总
  8. 深度学习:GCN图分类案例
  9. 最常见绩效考核方法有哪些?5种有效方法介绍
  10. c语言case用法注意,switch-case基本用法与注意事项