Как сравнить текущее время с диапазоном времени?

у меня есть две строковые переменные - time1 и time2. Оба содержат значение в формате HH: MM. Как я могу проверить:

  1. если текущее время находится в пределах time1 и time2?
  2. time1 произойдет в ближайшее час?

Upd. Я реализовал следующее Для преобразования time1 to . Но он использует амортизированные методы:

Date clTime1 = new Date();

SimpleDateFormat timeParser = new SimpleDateFormat("HH:mm", Locale.US);
try {
  clTime1 = timeParser.parse(time1);
} catch (ParseException e) {
}

Calendar now = Calendar.getInstance();
clTime1.setYear(now.get(Calendar.YEAR) - 1900);
clTime1.setMonth(now.get(Calendar.MONTH));
clTime1.setDate(now.get(Calendar.DAY_OF_MONTH));
System.out.println(clTime1.toString());

7 ответов


  • преобразовать в две строки Date объекты (которые также являются объектами времени) Создайте новый

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

Date EndTime = dateFormat.parse("10:00");

Date CurrentTime = dateFormat.parse(dateFormat.format(new Date()));

if (CurrentTime.after(EndTime))
{
    System.out.println("timeeee end ");
}

Не забудьте окружить блок try catch


это то, что я использовал и он работал для меня:

public static boolean isTimeWith_in_Interval(String valueToCheck, String endTime, String startTime) {
    boolean isBetween = false;
    try {
        Date time1 = new SimpleDateFormat("HH:mm:ss").parse(endTime);

        Date time2 = new SimpleDateFormat("HH:mm:ss").parse(startTime);

        Date d = new SimpleDateFormat("HH:mm:ss").parse(valueToCheck);

        if (time1.after(d) && time2.before(d)) {
            isBetween = true;
        }
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return isBetween;
}

посмотрите в класс календаря. У него есть методы, чтобы поддержать то, о чем вы просите. Дата устарела и не рекомендуется использовать.

вот ссылка на API. календарь

об использовании. Сначала вам нужно позвонить Calendar.getInstance() для создания объекта календаря. Затем вам нужно установить два поля, используя cal.set(Calendar.HOUR, your hours) и Calendar.MINUTES таким же образом. Затем вы можете вызвать функцию сравнения, до или после функций, чтобы получить нужную информацию. Также вы можете получить экземпляр с текущим временем в текущей локали.


например, если вы хотите сравнить время между 11 вечера и 6 утра для расчета дополнительного ночного тарифа для любого vechicle. тогда вам поможет следующий код.

// код

package com.example.timedate;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

import android.os.Bundle;
import android.app.Activity;
import android.text.format.DateFormat;
import android.text.format.Time;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    TextView tv;
    Button bt;
    int hour,min;
    String AM_PM;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView)findViewById(R.id.textView1);
        bt = (Button)findViewById(R.id.button1);



        final String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());*/

        bt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub


                Calendar c = Calendar.getInstance();
                hour = c.get(Calendar.HOUR_OF_DAY);
                min = c.get(Calendar.MINUTE);
                int ds = c.get(Calendar.AM_PM);
                if(ds==0)
                AM_PM="am";
                else
                AM_PM="pm";

                Toast.makeText(MainActivity.this, ""+hour+":"+min+AM_PM, Toast.LENGTH_SHORT).show();
                if((hour==11&&AM_PM.matches("pm")) || (hour<7&&AM_PM.matches("am"))  || (hour==12&&AM_PM.matches("am")))
                {
                    Toast.makeText(MainActivity.this, "Time is between the range", Toast.LENGTH_SHORT).show();
                }
                else
                    Toast.makeText(MainActivity.this, "Time is not between the range", Toast.LENGTH_SHORT).show();

            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}`

на данный момент я думаю о следующем подходе:

int clTime = Integer.parseInt(time1.substring(0, 1))*60 + Integer.parseInt(time1.substring(3, 4)); 

Time now = new Time();
now.setToNow();
int nowTime = now.hour*60 + now.minute;

Итак, мне нужно будет сравнить только целочисленные значения clTime и nowTime.


    Try this if you have specific time Zone.  

              try {
            SimpleDateFormat dateFormat = new SimpleDateFormat("hh a");
            Date timeseven = dateFormat.parse("7 AM");
            Date timeTen = dateFormat.parse("10 AM");
            Date timeOne = dateFormat.parse("1 PM");
            Date timefour = dateFormat.parse("4 PM");
            Date timefive = dateFormat.parse("10 PM");
            //Get current time
            // Date CurrentTime = dateFormat.parse(dateFormat.format(new Date()));
            //Sample time 
            Date CurrentTime = dateFormat.parse("9 PM");

            if (CurrentTime.after(timeseven) && CurrentTime.before(timeTen)) {
                Toast.makeText(this, "FIRST", Toast.LENGTH_SHORT).show();
            } else if (CurrentTime.after(timeTen) && CurrentTime.before(timeOne)) {
                Toast.makeText(this, "Secound", Toast.LENGTH_SHORT).show();
            } else if (CurrentTime.after(timeOne) && CurrentTime.before(timefour)) {
                Toast.makeText(this, "THird", Toast.LENGTH_SHORT).show();
            } else if (CurrentTime.after(timefour) && CurrentTime.before(timefive)) {
                Toast.makeText(this, "Fourth", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Not found in your time zone", Toast.LENGTH_SHORT).show();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }