Calcular la diferencia entre dos veces android
Estoy desarrollando y la aplicación android, donde tengo que calcular la diferencia entre dos times.I necesidad de calcular la diferencia de tiempo de 24 horas, y también la diferencia entre los tiempos en dos días (por ejemplo, 5 pm hoy a las 9 am mañana).
He intentado el código abajo, para calcular la diferencia que trabaja solamente por 24 horas,
- SimpleDateFormat - fecha imposible
- SimpleDateFormat parser
- Java ParseException al intentar la anotación String to Date
- Android Formato de fecha con zona horaria
- SimpleDateFormat ParseException: Unparseable date Error
String dateStart = "08:00:00"; String dateStop = "13:00:00"; //HH converts hour in 24 hours format (0-23), day calculation SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); Date d1 = null; Date d2 = null; try { d1 = format.parse(dateStart); d2 = format.parse(dateStop); //in milliseconds long diff = d2.getTime() - d1.getTime(); long diffHours = diff / (60 * 60 * 1000) % 24; Log.e("test",diffHours + " hours, "); } catch (Exception e) { // TODO: handle exception }
- Get Value Of Day Month forma objeto de la fecha en Android?
- Android.text.format.DateFormat "HH" no se reconoce como con java.text.SimpleDateFormat
- Unix timestamp a datetime en android
- Pregunta simple sobre java SimpleDateFormat
- Patrón de caracteres 'L' en SimpleDateFormat
- Conflicto de modo de 12/24 horas
- Objeto de fecha SimpleDateFormat no analiza correctamente la cadena de hora en el entorno Java (Android)
- Mes sin ceros iniciales en Android
Seńor, puedes hacerlo fácilmente usando la función java. long difference = date2.getTime() - date1.getTime();
Echa un vistazo en este enlace esto te ayudará.
Usted puede intentar algo como esto también si está seguro de que el 9 de la mañana es el día siguiente puede agregar un día y calcular la diferencia:
String string1 = "05:00:00 PM"; Date time1 = new SimpleDateFormat("HH:mm:ss aa").parse(string1); Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(time1); String string2 = "09:00:00 AM"; Date time2 = new SimpleDateFormat("HH:mm:ss aa").parse(string2); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(time2); calendar2.add(Calendar.DATE, 1); Date x = calendar1.getTime(); Date xy = calendar2.getTime(); long diff = x.getTime() - xy.getTime(); diffMinutes = diff / (60 * 1000); float diffHours = diffMinutes / 60; System.out.println("diff hours" + diffHours);
Manera correcta de encontrar la diferencia de tiempo adecuada:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); Date startDate = simpleDateFormat.parse("22:00"); Date endDate = simpleDateFormat.parse("07:00"); long difference = endDate.getTime() - startDate.getTime(); if(difference<0) { Date dateMax = simpleDateFormat.parse("24:00"); Date dateMin = simpleDateFormat.parse("00:00"); difference=(dateMax.getTime() -startDate.getTime() )+(endDate.getTime()-dateMin.getTime()); } int days = (int) (difference / (1000*60*60*24)); int hours = (int) ((difference - (1000*60*60*24*days)) / (1000*60*60)); int min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours)) / (1000*60); Log.i("log_tag","Hours: "+hours+", Mins: "+min);
El resultado será: Horas: 9, Mins: 0
Tl dr
ChronoUnit.HOURS.between( LocalTime.parse( "08:00:00" ) , LocalTime.parse( "13:00:00" ) )
5
…o…
ChronoUnit.HOURS.between( ZonedDateTime.of( LocalDate.of( 2017 , Month.JANUARY , 23 ) , LocalTime.parse( "08:00:00" ) , ZoneId.of( "America/Montreal" ) ) , ZonedDateTime.of( LocalDate.of( 2017 , Month.JANUARY , 25 ) , LocalTime.parse( "13:00:00" ) , ZoneId.of( "America/Montreal" ) ) )
53
Java.time
El enfoque moderno utiliza las clases java.time.
LocalTime
La clase LocalTime
representa una hora del día sin una fecha y sin una zona horaria.
LocalTime start = LocalTime.parse( "08:00:00" ) ; LocalTime stop = LocalTime.parse( "13:00:00" ) ;
Duration
Obtener un objeto Duration
para representar el span-of-time.
Duration d = Duration.between( start , stop ) ;
ChronoUnit
Para el número de horas, utilice ChronoUnit
.
long hours = ChronoUnit.HOURS.between( start , stop ) ;
Androide
Para Android, consulte los proyectos ThreeTen-Backport y ThreeTenABP. Vea las últimas viñetas a continuación.
ZonedDateTime
Si desea cruzar días, pasando de la medianoche, debe asignar fechas y zonas horarias.
Una zona horaria es crucial para determinar una fecha. Para cualquier momento dado, la fecha varía alrededor del globo por la zona. Por ejemplo, unos pocos minutos después de la medianoche en París Francia es un nuevo día, mientras que todavía "ayer" en Montreal Quebec .
Especifique un nombre de zona horaria adecuado en el formato de continent/region
, como America/Montreal
, Africa/Casablanca
o Pacific/Auckland
. Nunca utilice la abreviatura de 3-4 letras como EST
o IST
ya que no son zonas horarias verdaderas, no están estandarizadas y ni siquiera son únicas (!).
ZoneId z = ZoneId.of( "America/Montreal" ) ; ZonedDateTime start = ZonedDateTime.of( LocalDate.of( 2017 , Month.JANUARY , 23 ) , LocalTime.parse( "08:00:00" ) , z ) ; ZonedDateTime stop = ZonedDateTime.of( LocalDate.of( 2017 , Month.JANUARY , 25 ) , LocalTime.parse( "13:00:00" ) , z ) ; long hours = ChronoUnit.HOURS.between( start , stop ) ;
Vea este código en directo en IdeOne.com .
53
Acerca de java.time
El framework java.time está integrado en Java 8 y posterior. Estas clases suplantan las viejas clases de fecha-hora heredadas , como java.util.Date
, Calendar
y SimpleDateFormat
.
El proyecto Joda-Time , ahora en modo de mantenimiento , recomienda la migración a las clases java.time .
Para obtener más información, consulte el Tutorial de Oracle . Y busca Stack Overflow para muchos ejemplos y explicaciones. La especificación es JSR 310 .
Dónde obtener las clases java.time?
- Java SE 8 , Java SE 9 y posterior
- Incorporado.
- Parte de la API Java estándar con una implementación integrada.
- Java 9 agrega algunas características y correcciones menores.
- Java SE 6 y Java SE 7
- Gran parte de la funcionalidad de java.time se retroporta a Java 6 & 7 en ThreeTen-Backport .
- Androide
- El proyecto ThreeTenABP adapta específicamente a ThreeTen-Backport (mencionado anteriormente) para Android.
- Consulte Cómo utilizar ThreeTenABP ….
Lo solucioné de esta manera:
Date time1 = new SimpleDateFormat("HH:mm:ss aa").parse(string1); Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(time1); Date time2 = new SimpleDateFormat("HH:mm:ss aa").parse(string2); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(time2); if(calendar2.get(Calendar.AM_PM) == 1 && calendar1.get(Calendar.AM_PM) == 0) { calendar2.add(Calendar.DATE, 1); } long diff = calendar1.getTimeInMillis() - calendar2.getTimeInMillis()
Esto ayudará a encontrar la diferencia en el tiempo alrededor del reloj.
Try simple piece of code using For 24 hour time StartTime = "10:00"; EndTime = "13:00"; here starthour=10 and end hour=13 if(TextUtils.isEmpty(txtDate.getText().toString())||TextUtils.isEmpty(txtDate1.getText().toString())||TextUtils.isEmpty(txtTime.getText().toString())||TextUtils.isEmpty(txtTime1.getText().toString())) { Toast.makeText(getApplicationContext(), "Date/Time fields cannot be blank", Toast.LENGTH_SHORT).show(); } else { if (starthour > endhour) { Toast.makeText(getApplicationContext(), "Start Time Should Be Less Than End Time", Toast.LENGTH_SHORT).show(); } else if (starthour == endhour) { if (startmin > endmin) { Toast.makeText(getApplicationContext(), "Start Time Should Be Less Than End Time", Toast.LENGTH_SHORT).show(); } else{ tvalid = "True"; } } else { // Toast.makeText(getApplicationContext(),"Sucess"+(endhour-starthour)+(endmin-startmin),Toast.LENGTH_SHORT).show(); tvalid = "True"; } } same for date also
- ¿Cómo ir a la pantalla de inicio predeterminada de Android programatically?
- Android, ¿cómo llevar una tarea al primer plano?