【问题标题】:Check my current time is exist between 7:00 PM -10.00 AM in java android检查我的当前时间是否存在于 java android 中的 7:00 PM -10.00 AM
【发布时间】:2020-05-04 12:13:33
【问题描述】:

示例:我的当前时间 = 晚上 8:25,这意味着当前时间在晚上 7:00 到上午 10:00 之间。那么如何确定它&如果里面显示一条消息?

这是餐厅时间限制。从晚上 7:00 到上午 10:00 时间范围内用户不能订购任何东西。

 try {

        // Start Time
        String string1 = "07:00 PM";
        Date time1 = new SimpleDateFormat("hh:mm a").parse(string1);
        Calendar calendar1 = Calendar.getInstance();
        calendar1.setTime(time1);
        calendar1.add(Calendar.DATE, 1);


        // End Time
        String string2 = "10:00 AM";
        Date time2 = new SimpleDateFormat("hh:mm a").parse(string2);
        Calendar calendar2 = Calendar.getInstance();
        calendar2.setTime(time2);
        calendar2.add(Calendar.DATE, 1);


        // Get Current Time
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");
        String currenttime = sdf.format(date);
        Date d = new SimpleDateFormat("hh:mm a").parse(currenttime);
        Calendar calendar3 = Calendar.getInstance();
        calendar3.setTime(d);
        calendar3.add(Calendar.DATE, 1);

        Date x = calendar3.getTime();
        if (x.after(calendar1.getTime()) && x.before(calendar2.getTime())) {
            System.out.println("Not possible to order now");
        }
        else
        {
            System.out.println("YES POSSIBLE");
        }
    } catch (ParseException e) {
        e.printStackTrace();
    }

【问题讨论】:

  • 你试过任何代码吗?
  • 请出示您的代码。你有什么输入时间的数据类型?
  • 您的代码(虽然需要一些改进)似乎可以按预期运行,您是否遇到任何错误?
  • 您使用的是哪个 API 级别?
  • 顺便考虑扔掉长期过时且臭名昭著的麻烦SimpleDateFormat和朋友,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代Java日期和时间API .使用起来感觉好多了。

标签: java android datetime


【解决方案1】:

如果你想避免 NullPointerException 和 ParseException 检查:

public static boolean isAvailableForBooking() {
        /* 10:00 AM */
        final int OPEN_HOUR = 10; /* 0 - 23*/
        final int OPEN_MINUTE = 0; /* 0 - 59*/
        final int OPEN_SECOND = 0; /* 0 - 59*/

        /* 07:00 PM */
        final int CLOSED_HOUR = 19;
        final int CLOSED_MINUTE = 0;
        final int CLOSED_SECOND = 0;

        Calendar openHour = Calendar.getInstance();
        openHour.set(Calendar.HOUR_OF_DAY, OPEN_HOUR);
        openHour.set(Calendar.MINUTE, OPEN_MINUTE);
        openHour.set(Calendar.SECOND, OPEN_SECOND);

        Calendar closedHour = Calendar.getInstance();
        closedHour.set(Calendar.HOUR_OF_DAY, CLOSED_HOUR);
        closedHour.set(Calendar.MINUTE, CLOSED_MINUTE);
        closedHour.set(Calendar.SECOND, CLOSED_SECOND);

        Calendar now = Calendar.getInstance();

        return now.after(openHour) && now.before(closedHour);
    }

【讨论】:

    【解决方案2】:

    tl;博士

    使用现代 java.time 类,LocalTime

    ( ! localTime.isBefore( LocalTime.of( 19 , 0 ) ) )  // Is not before the start… (meaning, is equal to or later than)
    &&                                                  // …and… 
    localTime.isBefore( LocalTime.of( 7 , 0 ) ) ;       // is before the end.
    

    java.time

    永远不要使用CalendarDate 类。这些可怕的类在几年前被 JSR 310 中定义的现代 java.time 类所取代。

    LocalTime start = LocalTime.of( 19 , 0 ) ;  // 7 PM.
    LocalTime end = LocalTime.of( 10 , 0 ) ;    // 10 AM.
    

    确定当前时间需要时区。对于任何给定的时刻,一天中的时间和日期在全球范围内因区域而异。

    如果您想使用 JVM 当前的默认时区,请致电 ZoneId.systemDefault()

    ZoneId z = ZoneId.of( "Africa/Casablanca" ) ; 
    LocalTime localTime = LocalTime.now( z ) ;
    

    询问当前时间是否等于或晚于开始结束之前。提示:询问“等于或以后”的另一种方式是“不早于”。

    boolean withinTimeRange = ( ! localTime.isBefore( start ) ) && localTime.isBefore( end ) ;
    

    对于 26 岁之前的早期 Android,将 ThreeTenABP 库添加到您的项目中,以使用几乎相同的 API 获得大部分 java.time 功能。

    【讨论】:

      【解决方案3】:

      如果您尝试了任何代码,请发布其他代码,您可以通过在日历对象上设置您的当前时间以及您的服务开始时间和结束时间来检查它,然后从日历中获取日期对象并可以比较这些日期。

       String SERVICE_START_TIME="202-05-04 19:00:00";
       String SERVICE_END_TIME="202-05-05 10:00:00";
       public static boolean isValidTime() {
          try {
      
              Date time1 = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss",
                      Locale.getDefault()).parse(SERVICE_START_TIME);
              Calendar calendar1 = Calendar.getInstance();
              calendar1.setTime(time1);
              calendar1.add(Calendar.DATE, 1);
      
              Date time2 = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss",
                      Locale.getDefault()).parse(SERVICE_END_TIME);
              Calendar calendar2 = Calendar.getInstance();
              calendar2.setTime(time2);
              calendar2.add(Calendar.DATE, 1);
      
      
              Date d = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss",
                      Locale.getDefault()).parse(getCurrentTime());
              Calendar calendar3 = Calendar.getInstance();
              calendar3.setTime(d);
              calendar3.add(Calendar.DATE, 1);
      
              Date now = calendar3.getTime();
              if (now.after(calendar1.getTime()) && now.before(calendar2.getTime())) {
                  return true;
              }
          } catch (ParseException e) {
              e.printStackTrace();
          }
          return false;
      }
      

      您可以使用此功能获取系统当前时间。

        private static String getCurrentTime() {
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss",
                  Locale.getDefault());
          return sdf.format(new Date()).toUpperCase();
      }
      

      【讨论】:

        【解决方案4】:

        更简单的解决方案是以毫秒为单位的时间限制。然后以毫秒为单位获取所需的时间并检查 lowerBound

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-03
          • 1970-01-01
          • 2012-12-31
          • 2013-04-06
          • 1970-01-01
          • 1970-01-01
          • 2013-09-15
          • 2021-09-19
          相关资源
          最近更新 更多