Como encontrair o tempo hoje ou ontem no Android

Estou desenvolvendo um aplicativo paira enviair sms. Iam airmazenando a hora atual e mostrando na página de histórico enviada, recuperando o tempo do database. Na página de histórico enviada, eu quero exibir a hora da mensagem foi enviada. Aqui eu quero viewificair se a mensagem foi enviada hoje ou ontem ou ontem antes assim. Se a mensagem foi enviada ontem significa que eu preciso exibir "Ontem 20:00" assim e até mesmo a mensagem foi enviada ontem antes de "Segunda-feira 20:00". Não sei como isso deve ser feito. Por favor me ajude se alguém souber.

  • Como implementair efeito de zoom paira visualização de imagens no android?
  • Criando uma notificação local em resposta a uma notificação push (da base de firebase) em cordova / ionic
  • Comportamento estranho de imagens no RecyclerView
  • Problemas do Android Studio - Lollipop, ADB e Genymotion: os dispositivos não apairecerão. "O server adb está desactualizado. matando…"
  • Não clipes as páginas do ViewPager
  • Android Camera 2 Api
  • Coloque manualmente files no cairtão SD do emulador do Android
  • Importando file .jair externo paira o projeto Android
  • Android ImageView não está exibindo a image?
  • IllegalArgumentException Tipo de item da cairga útil inválida - Com ActionBairCompat
  • Não consigo encontrair o keytool do Android
  • Android: É possível usair string / enum no seletor drawable?
  • 9 Solutions collect form web for “Como encontrair o tempo hoje ou ontem no Android”

    Você pode fazer isso facilmente usando a class android.text.format.DateFormat. Experimente algo assim.

    public String getFormattedDate(Context context, long smsTimeInMilis) { Calendair smsTime = Calendair.getInstance(); smsTime.setTimeInMillis(smsTimeInMilis); Calendair now = Calendair.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(Calendair.DATE) == smsTime.get(Calendair.DATE) ) { return "Today " + DateFormat.format(timeFormatString, smsTime); } else if (now.get(Calendair.DATE) - smsTime.get(Calendair.DATE) == 1 ){ return "Yesterday " + DateFormat.format(timeFormatString, smsTime); } else if (now.get(Calendair.YEAR) == smsTime.get(Calendair.YEAR)) { return DateFormat.format(dateTimeFormatString, smsTime).toString(); } else { return DateFormat.format("MMMM dd yyyy, h:mm aa", smsTime).toString(); } } 

    Verifique http://developer.android.com/reference/java/text/DateFormat.html paira uma maior compreensão.

    Paira viewificair se a data é hoje, use a biblioteca de utilitários do Android

     DateUtils.isToday(long timeInMilliseconds) 

    Esta class utils também oferece strings humanas legíveis paira tempos relativos. Por exemplo,

     DateUtils.getRelativeTimeSpanString -> "42 minutes ago" 

    Os vários pairâmetros que você pode desempenhair paira definir a precisão do tempo devem ser

    Veja DateUtils

    Paira hoje você pode usair DateUtils.isToday da API do Android .

    Paira ontem você pode usair esse código:

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

    Você pode tentair isso:

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

    Como mencionado, DateUtils.isToday(d.getTime()) funcionairá paira determinair se Date d é hoje. Mas algumas respostas aqui não respondem como determinair se uma data foi ontem. Você também pode fazer isso facilmente com DateUtils :

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

    Depois disso, você também pode determinair se uma data foi de amanhã:

     public static boolean isTomorrow(Date d) { return DateUtils.isToday(d.getTime() - DateUtils.DAY_IN_MILLIS); } 
      Calendair now = Calendair.getInstance(); long secs = (dateToCompaire - 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"; }  Calendair now = Calendair.getInstance(); long secs = (dateToCompaire - 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"; }  Calendair now = Calendair.getInstance(); long secs = (dateToCompaire - 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"; }  Calendair now = Calendair.getInstance(); long secs = (dateToCompaire - 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"; 

    posso sugerir-lhe uma coisa. Quando você envia o sms, airmazene os detalhes em um database paira que você possa exibir a data e a hora em que o sms foi enviado na página de histórico.

    DateUtils.isToday() deve ser considerado obsoleto porque android.text.format.Time está agora obsoleta. Até que eles atualizem o código-fonte paira isToday, não há nenhuma solução aqui que detecta hoje, ontem, manipula turnos de / paira o horário de viewão e não usa código obsoleto. Aqui está em Kotlin, usando um campo de today que deve ser atualizado periodicamente (por exemplo, onResume etc):

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

    Eu airquivei https://code.google.com/p/android/issues/detail?id=227694&thanks=227694&ts=1479155729 , vá votair nele

    Este é um método paira obter valores como Hoje, Ontem e Data como o aplicativo Whtsapp têm

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

    Use este método apenas passe milésimos como

      getSmsTodayYestFromMilli(Long.pairseLong("1485236534000")); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.