Как сравнить текущее время с временным диапазоном? - PullRequest
8 голосов
/ 16 июня 2011

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

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

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

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());

Ответы [ 8 ]

24 голосов
/ 16 июня 2011
  • Преобразование двух строк в Date объекты (которые также являются объектами времени). Создайте новый объект Date.
  • Это будет содержать текущее время.
  • Используйте методы Date.before () и Date.after (), чтобы определить, находитесь ли вы во временном интервале.

РЕДАКТИРОВАТЬ: вы должны иметь возможность использовать это непосредственно (и никаких устаревших методов)

public static final String inputFormat = "HH:mm";

private Date date;
private Date dateCompareOne;
private Date dateCompareTwo;

private String compareStringOne = "9:45";
private String compareStringTwo = "1:45";

SimpleDateFormat inputParser = new SimpleDateFormat(inputFormat, Locale.US);

private void compareDates(){
    Calendar now = Calendar.getInstance();

    int hour = now.get(Calendar.HOUR);
    int minute = now.get(Calendar.MINUTE);

    date = parseDate(hour + ":" + minute);
    dateCompareOne = parseDate(compareStringOne);
    dateCompareTwo = parseDate(compareStringTwo);

    if ( dateCompareOne.before( date ) && dateCompareTwo.after(date)) {
        //yada yada
    }
}

private Date parseDate(String date) {

    try {
        return inputParser.parse(date);
    } catch (java.text.ParseException e) {
        return new Date(0);
    }
}
4 голосов
/ 30 января 2013
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

3 голосов
/ 29 декабря 2016

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

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;
}
1 голос
/ 27 сентября 2013

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

// Код

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;
    }

}`
1 голос
/ 16 июня 2011

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

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

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

0 голосов
/ 20 ноября 2018

Если вы хотите, чтобы время между 9 вечера до 9 утра, вы можете использовать следующие условия ..

if(cal.get(Calendar.HOUR_OF_DAY)> 20 || cal.get(Calendar.HOUR_OF_DAY)< 9)
{
    // do your stuffs
}
0 голосов
/ 15 марта 2018
    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();
        }
0 голосов
/ 17 июня 2011

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

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...