2011-06-16 51 views
7

Tengo dos variables de cadena - time1 y time2. Ambos contienen valor en el formato HH: MM. ¿Cómo puedo comprobar:¿Cómo comparar la hora actual con el rango de tiempo?

  1. Si la hora actual está dentro time1 y time2?
  2. time1 que sucederá en el hora más cercana?

Upd. Implementé lo siguiente para convertir time1 al formato Date. Pero utiliza métodos amortizados:

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

Si utilizo 'java.sql.Time', entonces puede fácilmente obtener valor de tiempo de mis cadenas - 'Time.valueOf (time1) .getTime()'. Pero, ¿cómo debería obtener la hora actual en el mismo formato ('long')? –

Respuesta

21
  • convertir los dos cuerdas a Date objetos (que también son objetos de tiempo) crear un nuevo objeto Date.
  • Esto contendrá la hora actual .
  • Utilice los métodos Date.before() y Date.after() para determinar si está en el intervalo de tiempo.

EDIT: Usted debe ser capaz de utilizar esta directamente (y no hay métodos en desuso)

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); 
    } 
} 
+0

@CaspNZ, traté de hacerlo, pero no encontré cómo convertir cadenas en mi formato (no como * 20081013T160000Z *) a 'Date'. ¿Me puede ayudar con esto? –

+0

@DArkO: parece que algunos de los _Consectores de fecha_ están en desuso, pero el uso de un analizador en mi ejemplo anterior no está en desuso, creo que esto todavía es compatible. –

+0

@CaspNZ, vale, tengo mis cadenas ahora como Fecha: 1 de enero de 1970 + mi hora1. ¿Cómo puedo obtener la hora actual con fecha igual al 1 de enero de 1970 también? –

1

Mira en la clase Calendar. Tiene los métodos para respaldar lo que estás preguntando. La fecha está obsoleta y no se recomienda su uso.

Aquí está el enlace a la API. Calendar

Sobre el uso. Primero debe llamar al Calendar.getInstance() para crear un objeto de calendario. A continuación, debe establecer los dos campos usando cal.set(Calendar.HOUR, your hours) y Calendar.MINUTES de la misma manera. Luego puede llamar a la función de comparación, antes o después de las funciones para obtener la información deseada. También puede obtener una instancia con la hora actual en la configuración regional actual.

0

A partir de ahora, yo estoy pensando en el siguiente enfoque:

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; 

Por lo tanto, voy a tener que comparar simplemente los valores enteros clTime y nowTime.

+0

Si está revisando durante un tiempo dentro de un * rango *, tendrá que tener en cuenta el escenario de desbordamiento. Es decir, la hora de inicio es más tarde en el día que la hora de finalización. En realidad, esta situación es verdadera independientemente del enfoque de codificación. comenzando a gustarle su solución para verificaciones periódicas diarias del rango de tiempo. – pmont

3
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 "); 
} 

No olvide rodeado de un bloque intento de captura

1

Por ejemplo, si se desea comparar tiempo entre 11 p.m.-06 a.m. para el cálculo de la tarifa noche extra para cualquier vechicle. luego el siguiente código te ayudará.

// Código

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

}` 
2

esto es lo que he usado y funcionó para mí:

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