当前位置: 首页 > 面试题库 >

使用Java查看当前时间是否在当天的特定时间范围内

田玉韵
2023-03-14
问题内容

我确信这在1000个不同的地方完成了1000次。问题是我想知道是否有更好/标准/更快的方法来检查当前“时间”是否在hh:mm:ss格式指定的两个时间值之间。例如,我的大业务逻辑不应在之间运行18:00:00 and 18:30:00。所以这就是我的想法:

 public static  boolean isCurrentTimeBetween(String starthhmmss, String endhhmmss) throws ParseException{
  DateFormat hhmmssFormat = new SimpleDateFormat("yyyyMMddhh:mm:ss");
  Date now = new Date();
  String yyyMMdd = hhmmssFormat.format(now).substring(0, 8);

  return(hhmmssFormat.parse(yyyMMdd+starthhmmss).before(now) &&
    hhmmssFormat.parse(yyyMMdd+endhhmmss).after(now));
 }

示例测试用例:

  String doNotRunBetween="18:00:00,18:30:00";//read from props file
  String[] hhmmss = downTime.split(",");
  if(isCurrentTimeBetween(hhmmss[0], hhmmss[1])){
   System.out.println("NOT OK TO RUN");
  }else{
   System.out.println("OK TO RUN");
  }

我正在寻找的是更好的代码

  • 在表现
  • 在外观上
  • 正确地

我不想要的

  • 第三方库
  • 异常处理辩论
  • 变量命名约定
  • 方法修饰符问题

问题答案:

这就是您需要做的所有事情,此方法与输入松散耦合且高度一致。

boolean isNowBetweenDateTime(final Date s, final Date e)
{
    final Date now = new Date();
    return now.after(s) && now.before(e);
}

如何获取Date对象的开始和结束与比较它们无关。通过传递String表示,使事情变得比您需要的复杂。

这是获得开始日期和结束日期的更好方法,而且松散耦合且高度一致。

private Date dateFromHourMinSec(final String hhmmss)
{
    if (hhmmss.matches("^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]$"))
    {
        final String[] hms = hhmmss.split(":");
        final GregorianCalendar gc = new GregorianCalendar();
        gc.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hms[0]));
        gc.set(Calendar.MINUTE, Integer.parseInt(hms[1]));
        gc.set(Calendar.SECOND, Integer.parseInt(hms[2]));
        gc.set(Calendar.MILLISECOND, 0);
        return gc.getTime();
    }
    else
    {
        throw new IllegalArgumentException(hhmmss + " is not a valid time, expecting HH:MM:SS format");
    }
}

现在,您可以进行两个命名良好的方法调用,这将很容易进行自我记录。



 类似资料:
  • 问题内容: 我需要检查当前时间是否在8 AM和3 PM之间。如果在这些时间范围之间,那么我需要返回yes,否则返回false。 但是我不确定我应该在这里使用吗?我可以不使用时间戳并相应地检查时间戳吗?什么是正确的方法? 我仍在使用Java 7。 问题答案: 如果您使用的是Java 8之前的Java版本,请查看Joda的API文档。 具体来说,有一个AbstractInterval#contains

  • 问题内容: 查看当前时间是否在发言和讲话之间的最佳方式是什么。 我会想到以下内容,不确定是否正确: 请让我知道如果这是正确的方法,可以写出更好的东西吗? 问题答案: 我最初的答案非常具体地针对所提出的问题,并且不适应午夜的时间范围。由于六年后这仍然是公认的答案,因此我在下面合并了@rouble的答案,该答案在我的文档中得到扩展以支持午夜。 我仍然坚持下面的原始意见,即该逻辑的大多数应用程序可能更适

  • 问题内容: 我有两个String变量- 和。两者都包含格式为 HH:MM的值 。我该如何检查: 如果当前的时间内 和 会在最近一小时发生吗? 更新。 我实现了以下内容以转换为格式。但是它使用折旧方法: 问题答案: 将两个字符串转换为 对象(也是时间对象)创建一个新对象。 这将包含当前时间。 使用Date.before()和Date.after()方法来确定您是否在时间间隔内。 编辑:您应该能够直接

  • 问题内容: 嗨,我正在尝试检查当前时间是否在某个时间范围内,例如8:00-16:30。下面的代码显示可以将当前时间作为字符串获取,但是不确定如何使用此值来检查它是否在上面指定的时间范围内。任何帮助将不胜感激! 问题答案: 有很多方法可以做到这一点。就我个人而言,如果可以避免的话,我不喜欢使用字符串。我宁愿处理日期组件。 下面的代码创建的日期为8:00和16:30,然后比较日期以查看当前日期/时间是

  • 问题内容: 我需要检查当前时间是否在时间范围内。最简单的情况是time_end> time_start: 但是,当用户输入结束时间小于开始时间的时间范围时,麻烦就开始了,例如“ 23:00-06:00”。像“ 00:00”这样的时间将在此范围内。大约5年前,我编写了以下PHP函数: 现在我需要做同样的事情,但是我想让它看起来好看。因此,我应该使用哪种算法来确定当前时间‘00:00’是否在 反向 范

  • 问题内容: 要求是简单地获取给定时区的当前时间( 包括正确的DST调整 )。 SO似乎在这方面徘徊了一些问题,但是我似乎找不到以节省时间的低摩擦方式得出的直接答案(在SO,Joda doco或谷歌搜索中)。似乎在给定的输入(当前UTC时间和所需的TZ)下,我应该能够从Joda Time库中链接几个方法来实现我想要的功能,但是在上述示例中似乎希望评估+处理偏移量/应用程序代码中的转换- 如果可能的话