[C#] Volgorde van datum onderdelen bepalen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 09-07 17:42
Voor een asp.net project moet ik de volgorde van de datum tijd onderdelen bepalen van de culture van de gebruiker. Dus heeft een gebruiker een dd-mm-yyyy culture of een mm/dd/yyyy culture en op basis daarvan controls aan een pagina toevoegen. Op dit moment heb ik dit als volgt gedaan:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//First format a special date
string formattedDate = new DateTime(2014, 12, 13).ToString(
    CultureInfo.DateTimeFormat.ShortDatePattern, CultureInfo.DateTimeFormat);
//Now split the string into the parts
string[] parts = formattedDate.Split(seperator.ToCharArray());
foreach (string part in parts)
{
    int parsedPart;
    if (!int.TryParse(part, out parsedPart))
    {
        continue;
    }

    if (parsedPart == 12)
    {
        //Add month
        row.Cells[CurrentCell++].Controls.Add(ddlMaand);
    }
    else if (parsedPart == 13)
    {
        //Add day
        row.Cells[CurrentCell++].Controls.Add(ddlDag);
    }
    else if (parsedPart == 2014 || parsedPart == 14)
    {
        //add year
        row.Cells[CurrentCell++].Controls.Add(ddlJaar);
    }

    if (CurrentCell < 5)
    {
        row.Cells[CurrentCell++].Controls.Add(new Literal() { Text = seperator });
    }
}


Is er een betere manier om iets dergelijks te doen of kan ik dit maar beter meteen in het Slechte code topic zetten :P

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
DateTime.Parse :? Eventueel een van de overloads waar je een IFormatProvider meegeeft?

Laat ik 't zo stellen: Waarom wil je weten of 't DD/MM of MM/DD is? Je zegt zelf al dat de gebruiker een ("ingestelde") culture heeft. Dan kun je toch gewoon de .Parse en .ToString() +Format Specifier overloads gebruiken om een datum te parsen / weer te geven?

En er zijn dan ook nog eens de TryParseExact() e.d. methodes. Over het algemeen volstaan de standaard datetime methods en gerelateerde native .Net classes/methods/whatnots prima in de meeste gevallen. Vandaar dat ik me afvraag wat je nou precies probeert te bereiken en waarom.

[ Voor 81% gewijzigd door RobIII op 05-02-2013 16:35 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 09-07 17:42
Het is voor een ASP.Net UserControl waarmee een gebruiker een datum in kan voeren. Dit allemaal zonder /zo min mogelijk javascript oid zodat het op de meest eenvoudige devices werkt.

Ik voeg losse dropdownlists toe die gebruikt worden om een datum in te voeren (of alleen een tijd of datum en tijd) en voor de datum moet ik dus uitvogelen of een gebruiker een mm/dd/yyyy culture heeft of een dd-mm-yyyy of een yyyy/mm/dd of wat voor andere varianten er maar zijn. Zodat de control in de juiste volgorde staan.

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Dan zou ik eens kijken naar CultureInfo's DateTimeFormat property. Die bevat, per culture, info over het standaard pattern:

C#:
1
2
CultureInfo ci = new CultureInfo(1043); //nl-NL
Console.WriteLine(ci.DateTimeFormat.LongDatePattern);

dddd d MMMM yyyy

C#:
1
2
CultureInfo ci = new CultureInfo(1033); //en-US
Console.WriteLine(ci.DateTimeFormat.ShortDatePattern);

M/d/yyyy

[ Voor 19% gewijzigd door RobIII op 05-02-2013 16:42 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • GBCHEATER
  • Registratie: Juni 2003
  • Laatst online: 17-09-2024
Misschien kan je het dan doen aan de hand van de parts van de datePatterns.

C#:
1
string[] parts = CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern.Split(CultureInfo.CurrentUICulture.DateTimeFormat.DateSeparator.ToCharArray());


Als je de DateSeperator er ook bij pakt, weet je direct waar je op moet splitsen.

Hier komt dan d, m, yyyy oid uit.