2009-12-26 10 views
9

Vous avez peut-être remarqué que certaines applications Web (par exemple certaines parties de GMail) affichent des dates dans un format plus lisible que celui de JJ/MM/AAAA.Formats de date lisibles par l'utilisateur

Par exemple, si j'ouvre un article de courrier du 23 (qui se trouve être il y a 3 jours au moment de l'écriture, je vais les éléments suivants:

décembre il y a 23 (3 jours)

Je voudrais mettre en œuvre une logique similaire à cela dans ma propre application web.

par exemple, lorsqu'il s'agit d'un objet TimeSpan .NET, je voudrais le convertir en texte tel que ce qui suit:

2 mois

3 jours

Y at-il une bibliothèque .NET capable de le faire déjà? Sinon je pourrais construire quelque chose de basique et open-source.


J'ai fait un début de base ici:

public static class TimeSpanHelpers 
{ 
    public static string ToHumanReadableString(
     this TimeSpan timeSpan) 
    { 
     if (timeSpan.TotalDays > 30) 
      return (timeSpan.TotalDays/30) + " month(s)"; 

     if (timeSpan.TotalDays > 7) 
      return (timeSpan.TotalDays/7) + " week(s)"; 

     return (timeSpan.TotalDays) + " day(s)"; 
    } 
} 
+3

Voir: http://stackoverflow.com/questions/11/how-do-i-calculate-relative-time – CMS

+0

Génial ... Je savais que quelqu'un me poserait cette question mais ne pouvait pas savoir quels termes utiliser dans la boîte de recherche. – Jonathan

+0

J'ai un algorithme simple pour cela sur mon blog que vous pourriez prolonger: http://www.robfe.com/2009/09/timeago-for-csharp/ Pas très différent du vôtre J'ai peur ... –

Répondre

7

Le groupe Noda Time est en train de faire tout cela. Venez et rejoignez le fun. Vous avez oublié de mentionner l'emplacement du projet Noda Time projet

+0

Cool stuff! Je vais aller là-bas. – Jonathan

+1

Ça a l'air cool. Pouvez-vous nous donner une idée d'où nous devrions nous pencher dans le projet Node Time? – heneryville

1

Une autre bibliothèque pour y parvenir: http://relativetime.codeplex.com/

(Disponible sur NuGet)

+0

Cela fonctionne, mais ne peut pas sembler faire des dates futures (par exemple, je veux dire "dans 2 jours") –

10

Essayez Humanizer http://humanizr.net/

TimeSpan.FromMilliseconds(1299630020).Humanize(3) => "2 weeks, 1 day, 1 hour" 

// in de-DE culture 
TimeSpan.FromDays(1).Humanize() => "Ein Tag" 
TimeSpan.FromDays(2).Humanize() => "2 Tage" 

// in sk-SK culture 
TimeSpan.FromMilliseconds(1).Humanize() => "1 milisekunda" 

// and a lot more 
DateTime.UtcNow.AddHours(2).Humanize() => "2 hours from now" 
"case".ToQuantity(5) => "5 cases" 
"man".ToQuantity(2) => "2 men" 
122.ToWords() => "one hundred and twenty-two" 
(.5).Gigabytes().Humanize() => "512 MB" 
"Long text to truncate".Truncate(10) => "Long text…", 
"Sentence casing".Transform(To.TitleCase) => "Sentence Casing" 

Nuget:

Install-Package Humanizer 
0

I fini par utiliser this method car j'avais besoin de supporter des dates futures comme dans 3 jours.

Questions connexes