2009-12-26 18 views
9

Puede haberse dado cuenta de que ciertas aplicaciones web (por ejemplo, ciertas partes de GMail) muestran fechas en un formato más legible que simplemente DD/MM/YYYY.Formatos de fecha legibles para humanos

Por ejemplo, si abro un elemento de correo del 23 (que pasa a ser hace 3 días en el momento de escribir, voy a conseguir lo siguiente: hace

23-DIC (3 días)

me gustaría implementar una lógica similar a esto en mi propia aplicación web.

Por ejemplo, cuando se trata de un objeto .NET TimeSpan, me gustaría convertirlo en texto, tales como el siguiente:

2 meses

3 días

¿Hay una biblioteca .NET capaz de hacer esto ya?

Si no, podría construir algo básico y de código abierto.


He hecho un comienzo básica aquí:

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

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

+0

Impresionante ... Sabía que alguien estaría preguntando esto, pero no entendía qué términos escribir en el cuadro de búsqueda. – Jonathan

+0

Tengo un algoritmo simple para eso en mi blog que puede ampliar: http://www.robfe.com/2009/09/timeago-for-csharp/ No muy diferente al suyo, me temo ... –

Respuesta

7

Noda Time El grupo está en el proceso de hacer precisamente esto. Ven y únete a la diversión. Se olvidó de mencionar la ubicación del proyecto proyecto Noda Time

+0

¡Cosas geniales! Me dirigiré allí. – Jonathan

+1

Parece genial. ¿Puede darnos una idea de en qué parte del proyecto Node Time deberíamos mirar? – heneryville

1

Otra biblioteca para hacer esto: http://relativetime.codeplex.com/

(Disponible en NuGet)

+0

Funciona bien, pero parece que no puede hacer fechas futuras (por ejemplo, quiero que diga "en 2 días") –

10

Trate 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 Terminé usando this method ya que necesitaba admitir fechas futuras dentro de 3 días.

Cuestiones relacionadas