Julekalender: 15. decembers svar

December 19, 2011 15:09 by henrik

Dagens svar kunne varieres på forskellig måde over en skabelon i stil med: "dd. MMMM yyyy g hh:mm zz" - et svar som alle deltagerne også var kommet frem til. Så koden kunne skrives noget i stil med:

  var dateTime = new System.DateTime(2011, 12, 15, 17, 42, 0, DateTimeKind.Local);

  string result = dateTime.ToString("dd. MMMM yyyy g hh:mm zz");

Det var dog alt, alt for simpelt for Brian Holmgård Kristensen som i stedet genererede formateringsstrengen med følgende umiddelbart ret besynderlige kode:

  var dato = 15.december(2011).Kl(17.42);

  Console.WriteLine(dato.ToDotHenrikString());

Da jeg så det, måtte jeg kigge en ekstra gang, gnide mig i øjnene og drikke en lille hvidtøl (samt kigge på resten af koden ;^) før pråsen gik op for mig: Extension metoder kan så sandelig misbruges - endda på fornøjeligste vis!

  public static class Extensions
  {
    public static DateTimeOffset december(this int dag, int aar)
    {
      return new DateTimeOffset(new DateTime(aar, 12, dag));
    }

    public static DateTimeOffset Kl(this DateTimeOffset dato, double tidspunkt)
    {
      var time = (int) tidspunkt;
      var minut = (int)((tidspunkt - time)*100);

      return new DateTimeOffset(new DateTime(dato.Year, dato.Month, dato.Day, time, minut, 0 /* sekund */));
    }

    public static string ToDotHenrikString(this DateTimeOffset dato)
    {
      return dato.ToString("dd. MMMM yyyy gg hh:mm zz");
    }
  }

Se det er god værkstedshumor! Brian har med denne fantastiske besvarelse helt automatisk vundet en af de to præmier sponsoreret af http://www.microsoft.com/web/webmatrix/:

ASP.NET bogen går til: Brian Holmgård Kristensen
Pluralsight abonnementet går til: Allan Agerholm Dahl, Ringsted


Tags:
Categories: Julekalender
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed
Comments are closed