¿Cómo comparar dos marcas de tiempo en android?
Quiero comparar dos marcas de tiempo y si la diferencia de eso es (- + 5minuts) entonces quiero mostrar diálogo de alerta.
es decir Si actualmente en nuestro reloj 4PM la segunda vez es 4.05PM o 3.55PM entonces alerta mostrará no.
- Para obtener la fecha y la hora de Timestamp Android
- ¿String timestamp a Calendario en Java?
- ¿Android consigue el timestamp actual?
- ¿Cómo obtener la hora actual del servidor firebase en milisegundos?
- Android - Cómo marcar marcas de tiempo en un SeekBar
¿Puede alguien sugerirme la manera cómo puedo conseguir la solución de esto. ??
Encontré después de buscar la función de obtener timeStamp y cómo comparar dos marcas de tiempo, pero para este tipo de condición hay algún método o función?
Gracias.
Mi código es: –
date= new Date(); currentTime = date.getTime(); if(currentTime !=0 && previousTime !=0){ String result = (String) DateUtils.getRelativeTimeSpanString(currentTime, previousTime, 0); }
Y estoy almacenando la hora actual en el tiempo anterior lilke tis manera: –
if(currentTime != previousTime){ previousTime = currentTime; }
- Convertir timestamp en fecha actual en android
- Fecha y hora de la fecha
- Conversión de la marca de hora como cadena a la fecha en android
- Error de VideoView getCurrentPosition () en Acer Iconia A200
- Android: obtenga la hora de la fecha de la marca de tiempo de SMS en milisegundos
- Convertir cadena al formato de sello de tiempo de MySQL en php
- Constante de fecha y hora de Android SensorEvent
- Obtener una marca de tiempo larga del selector de fechas onDateSet
Hay dos enfoques que podría tomar, dependiendo de si sólo desea medir el tiempo transcurrido, o desea establecer futuros tiempos para comparar.
La primera es similar a la respuesta de Sourabh Saldi, registra el resultado de
long prevEventTime = System.currentTimeMillis();
luego compararlo con System.currentTimeMillis () hasta que la diferencia sea superior a 300000
Como usted ha mencionado, su timestamp del servidor está en milisegundos desde el 1 de enero de 1970. Esto significa que es directamente comparable a System.currentTimeMillis (). Como tal, utilice:
long serverTimeStamp=//whatever your server timestamp is, however you are getting it. //You may have to use Long.parseLong(serverTimestampString) to convert it from a string //3000(millliseconds in a second)*60(seconds in a minute)*5(number of minutes)=300000 if (Math.abs(serverTimeStamp-System.currentTimeMillis())>300000){ //server timestamp is within 5 minutes of current system time } else { //server is not within 5 minutes of current system time }
El otro método se parece más a lo que ya estás haciendo – utilizando la clase Date para almacenar el tiempo actual y comparado. Para usarlos, deberás usar la clase GregorianCalendar para manejarlos. Vocación
calendar=new GregorianCalendar();
creará un nuevo calendario y establecerá automáticamente la fecha en la hora actual del sistema. También puede utilizar todas las funciones suministradas en la clase GregorianCalendar para desplazar el tiempo hacia delante o hacia atrás utilizando algo del formulario
calendar.add(GregorianCalendar.MINUTE, 5);
o establecerlo en el tiempo de un objeto Date con
calendar.setTime(date);
En su caso, dependiendo de la flexibilidad que desee tanto la clase GregorianCalendar como la clase Date tienen métodos after (), es probable que desee algo como lo siguiente:
Crear en alguna parte:
Date currentDate=newDate();
A continuación, establezca su punto de alarma:
calendar=new GregorianCalendar(); //this initialises to the current system time calendar.setTimeInMillis(<server timestamp>); //change to whatever the long timestamp value from your server is calendar.add(GregorianCalendar.MINUTE, 5); //set a time 5 minutes after the timestamp Date beforeThisDate = calendar.getTime(); calendar.add(GregorianCalendar.MINUTE, -10); //set a time 5 minutes before the timestamp Date afterThisDate = calendar.getTime();
A continuación, compruebe si la hora actual ha superado el punto de alarma configurado con
currentDate.setTime(System.currentTimeMillis()); if ((currentDate.before(beforeThisDate))&&(currentDate.after(afterThisDate))){ //do stuff, current time is within the two dates (5 mins either side of the server timestamp) } else { //current time is not within the two dates }
Este enfoque puede parecer un poco más largo, pero usted encontrará que es muy robusto y flexible, y se puede ampliar fácilmente para establecer puntos de alarma en el futuro, o utilizar los métodos de GregorianCalendar para fijar fácilmente las fechas horas, días o semanas en el futuro.
¿Qué tal sólo:
private static final long FIVE_MINUTES = 1000 * 60 * 5; //5 minutes in milliseconds long currentTime = new Date().getTime(); long previousTime = mPreviousTime; if ((currentTime - previousTime < FIVE_MINUTES && currentTime - previousTime > -FIVE_MINUTES ){ // under +/-5 minutes, do the work }else{ // over 5 minutes }
long etime = 0; final long time1 = uptimeMillis(); /* do something */ final long time2 = uptimeMillis(); if (time2 < time1) { etime = Long.MAX_VALUE - time1 + time2; } else { etime = time2 - time1; }
entonces compruebe este etime y haga como requerido! 1
Joda tiempo le ayudará con esta tarea.
import org.joda.time.Interval;
Utilice este método para cambiar sus fechas en formato de época
public Long getChnagedDate(Activity act,String date) throws ParseException { long epoch = new java.text.SimpleDateFormat ("MM/dd/yyyy HH:mm:ss aa").parse(date).getTime(); return epoch/1000; }
y después de comprobar la diferencia en http://www.epochconverter.com . Espero que te ayude.