Cómo encontrar el tiempo es hoy o ayer en android

Estoy desarrollando una aplicación para enviar sms. Iam que almacena la hora actual y la demostración en la página enviada del expediente recuperando el tiempo de la base de datos. En la página de historia enviada que quiero mostrar la hora del mensaje fue enviado. Aquí quiero comprobar que el mensaje se ha enviado hoy o ayer o el ayer antes de esa manera. Si el mensaje fue enviado ayer significa que necesito mostrar "ayer 20:00" como ese e incluso el mensaje fue enviado ayer significa "Lunes 20:00". No sé cómo tiene que ser hecho. Por favor, ayúdame si alguien sabe.

Puede hacerlo fácilmente usando la clase android.text.format.DateFormat. Prueba algo como esto.

public String getFormattedDate(Context context, long smsTimeInMilis) { Calendar smsTime = Calendar.getInstance(); smsTime.setTimeInMillis(smsTimeInMilis); Calendar now = Calendar.getInstance(); final String timeFormatString = "h:mm aa"; final String dateTimeFormatString = "EEEE, MMMM d, h:mm aa"; final long HOURS = 60 * 60 * 60; if (now.get(Calendar.DATE) == smsTime.get(Calendar.DATE) ) { return "Today " + DateFormat.format(timeFormatString, smsTime); } else if (now.get(Calendar.DATE) - smsTime.get(Calendar.DATE) == 1 ){ return "Yesterday " + DateFormat.format(timeFormatString, smsTime); } else if (now.get(Calendar.YEAR) == smsTime.get(Calendar.YEAR)) { return DateFormat.format(dateTimeFormatString, smsTime).toString(); } else { return DateFormat.format("MMMM dd yyyy, h:mm aa", smsTime).toString(); } } 

Consulte http://developer.android.com/reference/java/text/DateFormat.html para obtener más información.

Para comprobar si la fecha es hoy, utilice la biblioteca de utilidades de Android

 DateUtils.isToday(long timeInMilliseconds) 

Esta clase utils también ofrece cadenas legibles por humanos para tiempos relativos. Por ejemplo,

 DateUtils.getRelativeTimeSpanString -> "42 minutes ago" 

Existen varios parámetros con los que se puede jugar para definir la precisión del intervalo de tiempo

Vea DateUtils

Para hoy se puede utilizar DateUtils.isToday de Android API .

Para ayer puedes usar ese código:

 public static boolean isYesterday(long date) { Calendar now = Calendar.getInstance(); Calendar cdate = Calendar.getInstance(); cdate.setTimeInMillis(date); now.add(Calendar.DATE,-1); return now.get(Calendar.YEAR) == cdate.get(Calendar.YEAR) && now.get(Calendar.MONTH) == cdate.get(Calendar.MONTH) && now.get(Calendar.DATE) == cdate.get(Calendar.DATE); } 

Puede probar esto:

 Calendar mDate = Calendar.getInstance(); // just for example if (DateUtils.isToday(mDate.getTimeInMillis())) { //format one way } else { //format in other way } 

Como se mencionó, DateUtils.isToday(d.getTime()) funcionará para determinar si Date d es hoy. Pero algunas respuestas aquí no responden realmente cómo determinar si una fecha era ayer. También puede hacerlo fácilmente con DateUtils :

 public static boolean isYesterday(Date d) { return DateUtils.isToday(d.getTime() + DateUtils.DAY_IN_MILLIS); } 

Después de eso, también podría determinar si una fecha era mañana:

 public static boolean isTomorrow(Date d) { return DateUtils.isToday(d.getTime() - DateUtils.DAY_IN_MILLIS); } 
  Calendar now = Calendar.getInstance(); long secs = (dateToCompare - now.getTime().getTime()) / 1000; if (secs > 0) { int hours = (int) secs / 3600; if (hours <= 24) { return today + "," + "a formatted day or empty"; } else if (hours <= 48) { return yesterday + "," + "a formatted day or empty"; } } else { int hours = (int) Math.abs(secs) / 3600; if (hours <= 24) { return tommorow + "," + "a formatted day or empty"; } } return "a formatted day or empty"; 

Te puedo sugerir una cosa. Cuando envíe el sms almacenar los detalles en una base de datos de modo que u puede mostrar la fecha y hora en que el sms se envió en la página del historial.

DateUtils.isToday() debe considerarse obsoleto porque android.text.format.Time está obsoleto. Hasta que no actualicen el código fuente de isToday, no hay una solución aquí que detecte hoy, ayer, maneja cambios a / desde el horario de verano, y no utiliza código obsoleto. Aquí está en Kotlin, usando un campo de today que debe mantenerse actualizado periódicamente (por ejemplo onResume etc):

 @JvmStatic fun dateString(ctx: Context, epochTime: Long): String { val epochMS = 1000*epochTime val cal = Calendar.getInstance() cal.timeInMillis = epochMS val yearDiff = cal.get(Calendar.YEAR) - today.get(Calendar.YEAR) if (yearDiff == 0) { if (cal.get(Calendar.DAY_OF_YEAR) >= today.get(Calendar.DAY_OF_YEAR)) return ctx.getString(R.string.today) } cal.add(Calendar.DATE, 1) if (cal.get(Calendar.YEAR) == today.get(Calendar.YEAR)) { if (cal.get(Calendar.DAY_OF_YEAR) == today.get(Calendar.DAY_OF_YEAR)) return ctx.getString(R.string.yesterday) } val flags = if (yearDiff == 0) DateUtils.FORMAT_ABBREV_MONTH else DateUtils.FORMAT_NUMERIC_DATE return DateUtils.formatDateTime(ctx, epochMS, flags) } 

Presenté https://code.google.com/p/android/issues/detail?id=227694&thanks=227694&ts=1479155729 , vote en ella

Este es el método para obtener valores como Hoy, Ayer y Fecha como Whtsapp aplicación tienen

 public String getSmsTodayYestFromMilli(long msgTimeMillis) { Calendar messageTime = Calendar.getInstance(); messageTime.setTimeInMillis(msgTimeMillis); // get Currunt time Calendar now = Calendar.getInstance(); final String strTimeFormate = "h:mm aa"; final String strDateFormate = "dd/MM/yyyy h:mm aa"; if (now.get(Calendar.DATE) == messageTime.get(Calendar.DATE) && ((now.get(Calendar.MONTH) == messageTime.get(Calendar.MONTH))) && ((now.get(Calendar.YEAR) == messageTime.get(Calendar.YEAR))) ) { return "today at " + DateFormat.format(strTimeFormate, messageTime); } else if ( ((now.get(Calendar.DATE) - messageTime.get(Calendar.DATE)) == 1) && ((now.get(Calendar.MONTH) == messageTime.get(Calendar.MONTH))) && ((now.get(Calendar.YEAR) == messageTime.get(Calendar.YEAR))) ) { return "yesterday at " + DateFormat.format(strTimeFormate, messageTime); } else { return "date : " + DateFormat.format(strDateFormate, messageTime); } } 

Utilice este método sólo pasar Millisecond como

  getSmsTodayYestFromMilli(Long.parseLong("1485236534000")); 
  • Formato de fecha y hora, en milisegundos, con cadena local en Android
  • Cómo obtener sellos horarios precisos desde la ubicación GPS de Android
  • Añadir una cierta cantidad de tiempo a una hora actual y escribirlo
  • Android días restantes
  • ¿Es Android usando NTP para sincronizar el tiempo?
  • GPS: Cómo funciona la inyección de tiempo NTP
  • Tiempo de volver a Android
  • ¿Hay una manera de detectar cuando el usuario ha cambiado la hora del reloj en su dispositivo?
  • Calcular el tiempo entre dos veces Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.