100 votes

Comment trouver l'heure d'aujourd'hui ou d'hier dans Android ?

Je développe une application pour l'envoi de SMS. Je stocke l'heure actuelle et l'affiche dans la page d'historique des envois en récupérant l'heure dans la base de données. Dans la page d'historique des envois, je veux afficher l'heure à laquelle le message a été envoyé. Ici, je veux vérifier que le message a été envoyé aujourd'hui, hier ou avant-hier. Si le message a été envoyé hier, alors j'ai besoin d'afficher "Hier 20:00" comme ça et même le message a été envoyé hier avant signifie "Lundi 20:00". Je ne sais pas comment cela doit être fait. Veuillez m'aider si quelqu'un le sait.

9voto

Roman Golyshev Points 681

Vous pouvez essayer ceci :

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

9voto

Si votre niveau d'API est de 26 ou plus, il est préférable d'utiliser la classe LocalDate :

fun isToday(whenInMillis: Long): Boolean {
    return LocalDate.now().compareTo(LocalDate(whenInMillis)) == 0
}

fun isTomorrow(whenInMillis: Long): Boolean {
    return LocalDate.now().plusDays(1).compareTo(LocalDate(whenInMillis)) == 0
}

fun isYesterday(whenInMillis: Long): Boolean {
    return LocalDate.now().minusDays(1).compareTo(LocalDate(whenInMillis)) == 0
}

Si votre application a un niveau d'API inférieur, utilisez

fun isToday(whenInMillis: Long): Boolean {
    return DateUtils.isToday(whenInMillis)
}

fun isTomorrow(whenInMillis: Long): Boolean {
    return DateUtils.isToday(whenInMillis - DateUtils.DAY_IN_MILLIS)
}

fun isYesterday(whenInMillis: Long): Boolean {
    return DateUtils.isToday(whenInMillis + DateUtils.DAY_IN_MILLIS)
}

5voto

Jack the Ripper Points 1501

Une autre façon de le faire. Sur kotlin avec la librairie recommandée ThreeTen

  1. Ajouter ThreeTen

    implementation 'com.jakewharton.threetenabp:threetenabp:1.1.0'
  2. Ajouter des extensions kotlin.

    fun LocalDate.isYesterday(): Boolean = this.isEqual(LocalDate.now().minusDays(1L))
    
    fun LocalDate.isToday(): Boolean = this.isEqual(LocalDate.now())

5voto

Gastón Saillén Points 3041

Kotlin

La solution de @Choletski mais avec des secondes et en Kotlin

 fun getMyPrettyDate(neededTimeMilis: Long): String? {
        val nowTime = Calendar.getInstance()
        val neededTime = Calendar.getInstance()
        neededTime.timeInMillis = neededTimeMilis
        return if (neededTime[Calendar.YEAR] == nowTime[Calendar.YEAR]) {
            if (neededTime[Calendar.MONTH] == nowTime[Calendar.MONTH]) {
                if (neededTime[Calendar.DATE] - nowTime[Calendar.DATE] == 1) {
                    //here return like "Tomorrow at 12:00"
                    "Tomorrow at " + DateFormat.format("HH:mm:ss", neededTime)
                } else if (nowTime[Calendar.DATE] == neededTime[Calendar.DATE]) {
                    //here return like "Today at 12:00"
                    "Today at " + DateFormat.format("HH:mm:ss", neededTime)
                } else if (nowTime[Calendar.DATE] - neededTime[Calendar.DATE] == 1) {
                    //here return like "Yesterday at 12:00"
                    "Yesterday at " + DateFormat.format("HH:mm:ss", neededTime)
                } else {
                    //here return like "May 31, 12:00"
                    DateFormat.format("MMMM d, HH:mm:ss", neededTime).toString()
                }
            } else {
                //here return like "May 31, 12:00"
                DateFormat.format("MMMM d, HH:mm:ss", neededTime).toString()
            }
        } else {
            //here return like "May 31 2010, 12:00" - it's a different year we need to show it
            DateFormat.format("MMMM dd yyyy, HH:mm:ss", neededTime).toString()
        }
    }

Vous pouvez passer ici date.getTime() pour obtenir des résultats comme

Today at 18:34:45
Yesterday at 12:30:00
Tomorrow at 09:04:05

3voto

walkmn Points 1434

Il est également très joli en tant qu'extension kotlin :

fun Calendar.isToday() : Boolean {
    val today = Calendar.getInstance()
    return today[Calendar.YEAR] == get(Calendar.YEAR) && today[Calendar.DAY_OF_YEAR] == get(Calendar.DAY_OF_YEAR)
}

Et l'utilisation :

if (calendar.isToday()) {
    Log.d("Calendar", "isToday")
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X