Format date relative au format lisible par L'homme dans Android en utilisant Android DateUtils API

J'ai un champ de date (lastUpdated). Je veux traduire cette date en format lisible par l'homme tels que 'aujourd'hui', 'il y a 1 jour', '2 jours', ...

J'utilise android.texte.format.DateUtils API inclus dans la bibliothèque Android.

Voici mon essai:

 DateUtils.getRelativeDateTimeString(context, 
                  lastUpdated.getTime(), 
                  DateUtils.DAY_IN_MILLIS, 
                  DateUtils.WEEK_IN_MILLIS, 
                  DateUtils.FORMAT_SHOW_YEAR);

Voici le résultat:

0 day ago, 12:00am
yesterday, 9:30am
2 days ago, 1:30pm
Sep 4, 12:30pm

Le résultat attendu: (pas d'information temporelle)

0 day ago --------- This should be 'today'
yesterday
2 days ago
Sep 4

Notez que, si j'efface le temps de lastUpdated. Il va montrer "12: 00am" pour les informations de temps.

Quelqu'un a des idées? Est-il possible de supprimer le temps de sortie?

Merci!

23
demandé sur Loc 2014-09-12 20:45:10

2 réponses

Vous pouvez utiliser DateUtils.getRelativeTimeSpanString pour cela:

long now = System.currentTimeMillis();
DateUtils.getRelativeTimeSpanString(lastUpdated.getTime(), now, DateUtils.DAY_IN_MILLIS);
52
répondu Idolon 2014-09-12 17:31:08

Il semble que vous vouliez avoir un gestionnaire personnalisé pour les temps récents, et quelque chose de plus stdnard pour les dates plus éloignées. quelque chose comme ça fonctionnerait:

public String getTimeDiff(long secondsTimeDiff)
{       
    long secondsInOneDay = 84600;
    int maxDaysAgo = 10;

    if ( secondsTimeDiff < secondsInOneDay)
    {
        return "today";
    }
    else if ( secondsTimeDiff < 2*secondsInOneDay)
    {
        return "yesterday";
    }
    else if ( secondsTimeDiff < maxDaysAgo*secondsInOneDay)
    {
        int days = (int) (secondsTimeDiff / secondsInOneDay);
        return days + " days ago";
    }
    else
    {
        //use normal DateUtils logic here...
        return "....";
    }
}
0
répondu Dave 2014-09-12 17:08:38