2009-12-26 15 views
9

È possibile che alcune applicazioni Web (ad esempio alcune parti di GMail) visualizzino le date in un formato più leggibile rispetto a GG/MM/AAAA.Formati di data leggibile dall'uomo

Per esempio, se apro un elemento di posta dal 23 (che risulta essere 3 giorni fa, al momento della scrittura, vado a prendere il seguente:

23 dic (3 giorni fa)

mi piacerebbe implementare la logica simile a questo nel mio applicazione web.

per esempio, quando si tratta di un oggetto .NET TimeSpan, vorrei convertirlo in testo come il seguente:

due mesi

3 giorni

C'è una libreria .NET capace di fare questo già?

Se no potrei creare qualcosa di base e open source.


Ho fatto una partenza di base qui:

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

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

+0

Impressionante ... Sapevo che qualcuno lo avrebbe chiesto ma non riusciva a capire quali termini digitare nella casella di ricerca. – Jonathan

+0

Ho un semplice algoritmo per questo sul mio blog che potresti estendere: http://www.robfe.com/2009/09/timeago-for-csharp/ Non molto diverso dal tuo temo ... –

risposta

7

Il gruppo Noda Time è in procinto di fare proprio questo. Vieni e unisciti al divertimento. Ho dimenticato di parlare della posizione del progetto Noda Time

+0

Cose fantastiche! Mi dirigo laggiù. – Jonathan

+1

Sembra fantastico. Puoi darci un'idea di dove nel progetto Node Time dovremmo guardare. – heneryville

10

Prova 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 ho finito con l'utilizzo di this method in quanto avevo bisogno di supportare date future come da 3 giorni a partire da ora.

Problemi correlati