Le bon moyen de formater la date avec des chaînes comme aujourd'hui, hier, demain, etc.

J'ai un aperçu de la date. Et mon texte contient une chaîne de dates comme 2011.09.17. Eh bien, je souhaite toujours avoir cela, mais je veux aussi ajouter des informations plus conviviales pour des dates spécifiques comme aujourd'hui ou hier. Par exemple, si aujourd'hui, c'est 2011.09.17, je souhaite que ma vision de texte ait la valeur d'hier au lieu de 2011.09.16 et aujourd'hui à la place de 2011.09.17.

Eh bien, j'ai déjà réussi à le faire :), mais de la manière laide :(. Je fais cela avec beaucoup de 'if-> que' ce qui est vraiment laid et que je veux ajouter une nouvelle règle comme si la date est Plus d'un an, je veux mettre une chaîne comme l'année dernière ou ça … J'ai vraiment besoin d'ajouter une logique méchante.

  • Les widgets d'application Android (pour l'écran d'accueil) ont-ils laissé des gestes?
  • ImageView Pinch-zoom Limites d'échelle et bornes panoramiques
  • ImageView inside CollapsingToolbarLayout n'est pas visible dans certains appareils
  • Suppression des événements de Calendrier n'étant pas supprimés
  • Comment utiliser avertir et attendre
  • Le mediaplayer simple joue-t-il un mp3 à partir du chemin du fichier?
  • Ma question est de trouver un moyen plus agréable de le faire? Existe-t-il quelque chose comme un motif de conception pour cela? Quelle est la façon recommandée de le faire? Je suis sûr que beaucoup de gens ont rencontré ce genre de problèmes

    S'il y a une approche de baigneur que mille d'Ifs? Sinon, je vous remercie d'une façon ou d'une autre, je vais arrêter de chercher la solution de baigneuse

    Des suggestions, des extraits ou des extraits seront appréciés

    Merci

  • Composants de gravité de l'accéléromètre
  • Algorithme basé sur l'intérêt et l'emplacement pour l'application mobile Android
  • Meilleure pratique pour calculer la vitesse moyenne à partir des coordonnées GPS
  • Comment trouver les coins d'un objet Rect dans openCV?
  • Android Mapview: fusionnant les marqueurs qui se chevauchent dans un nouveau marqueur
  • Une similitude perceptuelle entre deux séquences audio
  • 5 Solutions collect form web for “Le bon moyen de formater la date avec des chaînes comme aujourd'hui, hier, demain, etc.”

    J'utilise habituellement cette bibliothèque java pratique pour la mise en forme du temps relatif. Prety Time Library

    Vous pouvez essayer getRelativeDateTimeString dans DateUtils http://developer.android.com/reference/android/text/format/DateUtils.html

     public class RelativeWeekday { private final Calendar mCalendar; public RelativeWeekday(Calendar calendar) { mCalendar = calendar; } @Override public String toString() { Calendar today = Calendar.getInstance(Locale.getDefault()); int dayOfYear = mCalendar.get(Calendar.DAY_OF_YEAR); if (Math.abs(dayOfYear - today.get(Calendar.DAY_OF_YEAR)) < 2) { return getRelativeDay(today); } return getWeekDay(); } private String getRelativeDay(Calendar today) { return DateUtils.getRelativeTimeSpanString( mCalendar.getTimeInMillis(), today.getTimeInMillis(), DateUtils.DAY_IN_MILLIS, DateUtils.FORMAT_SHOW_WEEKDAY).toString(); } private String getWeekDay() { SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE"); return dayFormat.format(mCalendar.getTimeInMillis()); } } 

    Essayez ceci, je l'ai implémenté en utilisant joda-datatime2.2.jar et java SimpleDateFormat

     import java.text.SimpleDateFormat; import java.util.Date; import org.joda.time.DateMidnight; import org.joda.time.DateTime; import org.joda.time.Days; public class SmartDateTimeUtil { private static String getHourMinuteString(Date date){ SimpleDateFormat hourMinuteFormat = new SimpleDateFormat(" h:ma"); return hourMinuteFormat.format(date); } private static String getDateString(Date date){ SimpleDateFormat dateStringFormat = new SimpleDateFormat("EEE',' MMM d y',' h:ma"); return dateStringFormat.format(date); } private static boolean isToday (DateTime dateTime) { DateMidnight today = new DateMidnight(); return today.equals(dateTime.toDateMidnight()); } private static boolean isYesterday (DateTime dateTime) { DateMidnight yesterday = (new DateMidnight()).minusDays(1); return yesterday.equals(dateTime.toDateMidnight()); } private static boolean isTomorrow(DateTime dateTime){ DateMidnight tomorrow = (new DateMidnight()).plusDays(1); return tomorrow.equals(dateTime.toDateMidnight()); } private static String getDayString(Date date) { SimpleDateFormat weekdayFormat = new SimpleDateFormat("EEE',' h:ma"); String s; if (isToday(new DateTime(date))) s = "Today"; else if (isYesterday(new DateTime(date))) s = "Yesterday," + getHourMinuteString(date); else if(isTomorrow(new DateTime(date))) s = "Tomorrow," +getHourMinuteString(date); else s = weekdayFormat.format(date); return s; } public static String getDateString_shortAndSmart(Date date) { String s; DateTime nowDT = new DateTime(); DateTime dateDT = new DateTime(date); int days = Days.daysBetween(dateDT, nowDT).getDays(); if (isToday(new DateTime(date))) s = "Today,"+getHourMinuteString(date); else if (days < 7) s = getDayString(date); else s = getDateString(date); return s; } } 

    Cas simples à utiliser et à tester la classe Util:

     import java.util.Calendar; import java.util.Date; public class SmartDateTimeUtilTest { public static void main(String[] args) { System.out.println("Date now:"+SmartDateTimeUtil.getDateString_shortAndSmart(new Date())); System.out.println("Date 5 days before :"+SmartDateTimeUtil.getDateString_shortAndSmart(getFutureDay(-5))); System.out.println("Date 1 day before :"+SmartDateTimeUtil.getDateString_shortAndSmart(getFutureDay(-1))); System.out.println("Date last month:"+SmartDateTimeUtil.getDateString_shortAndSmart(getFutureMonth(-1))); System.out.println("Date last year:"+SmartDateTimeUtil.getDateString_shortAndSmart(getFutureDate(-1))); System.out.println("Date 1 day after :"+SmartDateTimeUtil.getDateString_shortAndSmart(getFutureDay(1))); } public static Date getFutureDate(int numberOfYears){ Calendar c = Calendar.getInstance(); c.setTime(new Date()); c.add(Calendar.YEAR, numberOfYears); return c.getTime(); } public static Date getFutureMonth(int numberOfYears){ Calendar c = Calendar.getInstance(); c.setTime(new Date()); c.add(Calendar.MONTH, numberOfYears); return c.getTime(); } public static Date getFutureDay(int numberOfYears){ Calendar c = Calendar.getInstance(); c.setTime(new Date()); c.add(Calendar.DATE, numberOfYears); return c.getTime(); } } 

    Pour Android Utilisez la bibliothèque JodaTime dans le fichier build.gradle:

    Compile 'net.danlew: android.joda: 2.9.9'

     public static String formateddate(String date) { DateTime dateTime = DateTimeFormat.forPattern("dd-MMM-yyyy").parseDateTime(date); DateTime today = new DateTime(); DateTime yesterday = today.minusDays(1); DateTime twodaysago = today.minusDays(2); DateTime tomorrow= today.minusDays(-1); if (dateTime.toLocalDate().equals(today.toLocalDate())) { return "Today "; } else if (dateTime.toLocalDate().equals(yesterday.toLocalDate())) { return "Yesterday "; } else if (dateTime.toLocalDate().equals(twodaysago.toLocalDate())) { return "2 days ago "; } else if (dateTime.toLocalDate().equals(tomorrow.toLocalDate())) { return "Tomorrow "; } else { return date; } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.