Comment trouver le temps est aujourd’hui ou hier dans Android

Je développe une application pour l’envoi de sms. Stocker l’heure actuelle et l’afficher dans la page Historique des envois en récupérant l’heure dans la firebase database. Dans la page d’historique envoyé, je souhaite afficher l’heure d’envoi du message. Ici, je veux vérifier que le message a été envoyé aujourd’hui, hier ou hier avant cela. Si le message a été envoyé hier, alors je dois afficher “Hier 20:00” comme ça et même le message a été envoyé hier avant “Lundi 20:00”. Je ne sais pas comment cela doit être fait. S’il vous plaît, aidez-moi si quelqu’un le sait.

Vous pouvez le faire facilement en utilisant la classe android.text.format.DateFormat. Essayez quelque chose comme ça.

public Ssortingng getFormattedDate(Context context, long smsTimeInMilis) { Calendar smsTime = Calendar.getInstance(); smsTime.setTimeInMillis(smsTimeInMilis); Calendar now = Calendar.getInstance(); final Ssortingng timeFormatSsortingng = "h:mm aa"; final Ssortingng dateTimeFormatSsortingng = "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(timeFormatSsortingng, smsTime); } else if (now.get(Calendar.DATE) - smsTime.get(Calendar.DATE) == 1 ){ return "Yesterday " + DateFormat.format(timeFormatSsortingng, smsTime); } else if (now.get(Calendar.YEAR) == smsTime.get(Calendar.YEAR)) { return DateFormat.format(dateTimeFormatSsortingng, smsTime).toSsortingng(); } else { return DateFormat.format("MMMM dd yyyy, h:mm aa", smsTime).toSsortingng(); } } 

Vérifiez http://developer.android.com/reference/java/text/DateFormat.html pour plus de compréhension.

Pour vérifier si la date est aujourd’hui, utilisez la bibliothèque Android utils

 DateUtils.isToday(long timeInMilliseconds) 

Cette classe d’utilitaires offre également des chaînes lisibles par l’homme pour les temps relatifs. Par exemple,

 DateUtils.getRelativeTimeSpanSsortingng(long timeInMilliseconds) -> "42 minutes ago" 

Vous pouvez jouer avec plusieurs parameters pour définir la précision de la période.

Voir DateUtils

Comme mentionné, DateUtils.isToday(d.getTime()) fonctionnera pour déterminer si Date d est aujourd’hui. Mais certaines réponses ne permettent pas de déterminer si une date était hier. Vous pouvez aussi le faire facilement avec DateUtils :

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

Après cela, vous pourriez également déterminer si une date était demain:

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

Pour aujourd’hui, vous pouvez utiliser DateUtils.isToday partir de l’ API Android .

Pour hier, vous pouvez utiliser ce code:

 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); } 

Vous pouvez essayer ceci:

 Calendar mDate = Calendar.getInstance(); // just for example if (DateUtils.isToday(mDate.getTimeInMillis())) { //format one way } else { //format in other way } 
  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"; 

Ceci est une méthode pour obtenir des valeurs telles que Today, Yesterday et Date, comme Whtsapp app ont

 public Ssortingng getSmsTodayYestFromMilli(long msgTimeMillis) { Calendar messageTime = Calendar.getInstance(); messageTime.setTimeInMillis(msgTimeMillis); // get Currunt time Calendar now = Calendar.getInstance(); final Ssortingng strTimeFormate = "h:mm aa"; final Ssortingng 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); } } 

Utilisez cette méthode juste passer Milliseconde comme

  getSmsTodayYestFromMilli(Long.parseLong("1485236534000")); 

Je peux vous suggérer une chose. Lorsque vous envoyez les sms, stockez les détails dans une firebase database pour que vous puissiez afficher la date et l’heure d’envoi du SMS dans la page d’historique.

DateUtils.isToday() doit être considéré comme obsolète car android.text.format.Time est désormais obsolète. Jusqu’à ce qu’ils mettent à jour le code source pour isToday, il n’y a pas de solution ici pour détecter aujourd’hui, hier, les manipulations vers / depuis l’heure d’été, et n’utilise pas de code obsolète. Ici, c’est dans Kotlin, en utilisant un champ today qui doit être mis à jour périodiquement (par exemple, onResume etc.):

 @JvmStatic fun dateSsortingng(ctx: Context, epochTime: Long): Ssortingng { 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.getSsortingng(R.ssortingng.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.getSsortingng(R.ssortingng.yesterday) } val flags = if (yearDiff == 0) DateUtils.FORMAT_ABBREV_MONTH else DateUtils.FORMAT_NUMERIC_DATE return DateUtils.formatDateTime(ctx, epochMS, flags) } 

J’ai envoyé https://code.google.com/p/android/issues/detail?id=227694&thanks=227694&ts=1479155729 , allez voter dessus


NO libs utilisé


Hier

Aujourd’hui

Demain

Cette année

Toute année

  public static Ssortingng getMyPrettyDate(long neededTimeMilis) { Calendar nowTime = Calendar.getInstance(); Calendar neededTime = Calendar.getInstance(); neededTime.setTimeInMillis(neededTimeMilis); if ((neededTime.get(Calendar.YEAR) == nowTime.get(Calendar.YEAR))) { if ((neededTime.get(Calendar.MONTH) == nowTime.get(Calendar.MONTH))) { if (neededTime.get(Calendar.DATE) - nowTime.get(Calendar.DATE) == 1) { //here return like "Tomorrow at 12:00" return "Tomorrow at " + DateFormat.format("HH:mm", neededTime); } else if (nowTime.get(Calendar.DATE) == neededTime.get(Calendar.DATE)) { //here return like "Today at 12:00" return "Today at " + DateFormat.format("HH:mm", neededTime); } else if (nowTime.get(Calendar.DATE) - neededTime.get(Calendar.DATE) == 1) { //here return like "Yesterday at 12:00" return "Yesterday at " + DateFormat.format("HH:mm", neededTime); } else { //here return like "May 31, 12:00" return DateFormat.format("MMMM d, HH:mm", neededTime).toSsortingng(); } } else { //here return like "May 31, 12:00" return DateFormat.format("MMMM d, HH:mm", neededTime).toSsortingng(); } } else { //here return like "May 31 2010, 12:00" - it's a different year we need to show it return DateFormat.format("MMMM dd yyyy, HH:mm", neededTime).toSsortingng(); } }