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.
Réponses
Trop de publicités?
Roman Golyshev
Points
681
Константин Семочкин
Points
191
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)
}
Jack the Ripper
Points
1501
Une autre façon de le faire. Sur kotlin avec la librairie recommandée ThreeTen
-
Ajouter ThreeTen
implementation 'com.jakewharton.threetenabp:threetenabp:1.1.0'
-
Ajouter des extensions kotlin.
fun LocalDate.isYesterday(): Boolean = this.isEqual(LocalDate.now().minusDays(1L)) fun LocalDate.isToday(): Boolean = this.isEqual(LocalDate.now())
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
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")
}