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?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.getRelativeTimeSpanString(long timeInMilliseconds) -> "42 minutes ago"
Il existe plusieurs paramètres avec lesquels vous pouvez jouer pour définir la précision de l'intervalle de temps.
Voir DateUtils
Comme indiqué, DateUtils.isToday(d.getTime())
fonctionnera pour déterminer si Date d
est aujourd'hui. Mais certaines réponses ici ne répondent pas réellement à la question de savoir comment 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);
}
Ensuite, vous pouvez également déterminer si une date est fixée au lendemain :
public static boolean isTomorrow(Date d) {
return DateUtils.isToday(d.getTime() - DateUtils.DAY_IN_MILLIS);
}
Vous pouvez le faire facilement en utilisant la classe Android.text.format.DateFormat. Essayez quelque chose comme ceci.
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();
}
}
Vérifiez http://developer.Android.com/reference/java/text/DateFormat.html pour une meilleure compréhension.
Pour aujourd'hui, vous pouvez utiliser DateUtils.isToday
de 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);
}
PAS de librairies utilisées
Hier
Aujourd'hui
Demain
Cette année
Toute année
public static String 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).toString();
}
} else {
//here return like "May 31, 12:00"
return DateFormat.format("MMMM d, HH:mm", neededTime).toString();
}
} 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).toString();
}
}
Fonction d'extension Kotlin :
fun Long.toPrettyDate(): String {
val nowTime = Calendar.getInstance()
val neededTime = Calendar.getInstance()
neededTime.timeInMillis = this
return if (neededTime[Calendar.YEAR] == nowTime[Calendar.YEAR]) {
if (neededTime[Calendar.MONTH] == nowTime[Calendar.MONTH]) {
when {
neededTime[Calendar.DATE] - nowTime[Calendar.DATE] == 1 -> {
//here return like "Tomorrow at 12:00"
"Tomorrow at " + SimpleDateFormat("HH:mm", Locale.getDefault()).format(Date(this))
}
nowTime[Calendar.DATE] == neededTime[Calendar.DATE] -> {
//here return like "Today at 12:00"
"Today at " + SimpleDateFormat("HH:mm", Locale.getDefault()).format(Date(this))
}
nowTime[Calendar.DATE] - neededTime[Calendar.DATE] == 1 -> {
//here return like "Yesterday at 12:00"
"Yesterday at " + SimpleDateFormat("HH:mm", Locale.getDefault()).format(Date(this))
}
else -> {
//here return like "May 31, 12:00"
SimpleDateFormat("MMMM d, HH:mm", Locale.getDefault()).format(Date(this))
}
}
} else {
//here return like "May 31, 12:00"
SimpleDateFormat("MMMM d, HH:mm", Locale.getDefault()).format(Date(this))
}
} else {
//here return like "May 31 2022, 12:00" - it's a different year we need to show it
SimpleDateFormat("MMMM dd yyyy, HH:mm", Locale.getDefault()).format(Date(this))
}
}
- Réponses précédentes
- Plus de réponses