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.
- Cómo convertir los segundos en este formato "HH: mm: ss"
- Fuente confiable de tiempo para el applet JavaCard en SIM
- Android java.util.concurrent.TimeUnit Convierta milisegundos a minutos
- Obtener la hora del sistema en milisegundos en android
- ¿Qué es T en YYYYMMDDTHHMMSS?
- Diferencia horaria entre dos tiempos
- ¿Cuál es la curva de aprendizaje para Android?
- Tiempo de dev Android vs tiempo de dev de iPhone
- Cómo cambiar el tiempo del simulador Android interno
- Compruebe si la hora actual es más de una hora desde el tiempo "last_updated"
- Cómo obtener la hora actual de Internet en android
- ¿Cómo hacer que el código se detenga por un par de segundos en android?
- Por qué funciónMillis () devuelve -1 en java
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"));
- Cómo utilizar el nuevo diseño de restricciones de Android para reducir la jerarquía de vistas
- Android cambiar dinámicamente el estilo en tiempo de ejecución