[c#] datum opmaak

Pagina: 1
Acties:
  • 189 views sinds 30-01-2008
  • Reageer

  • xos
  • Registratie: Januari 2002
  • Laatst online: 26-03 10:21
Hallo,

ik ben bezig om een datum uit een Access database te formateren op zo'n manier dat deze op alle pc's met een Nederlandse weergave wordt afgebeeld. Ongeacht wat de instellingen van de betreffende pc's zijn.

Het probleem treedt op wanneer de dag < 10 is. In dat geval wordt de dag en de maand omgedraaid. Voorbeeld:
code:
1
2
3
4
01-02-2004  ->  02-01-2004
15-02-2004  ->  15-02-2004
01-12-2004  ->  12-01-2004
15-12-2004  ->   15-12-2004


Ik heb het volgende al geprobeerd zonder resultaat:
code:
1
2
3
4
DateTime dt = Reader.GetDateTime(1);
System.Globalization.DateTimeFormatInfo dfi = new System.Globalization.DateTimeFormatInfo();
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("nl-NL");
this.TxbZoekDatum.Text = dt.ToString("d", ci);


code:
1
2
this.TxbZoekDatum.Text = Reader.GetDateTime(1).ToString("D", 
                                             new System.Globalization.CultureInfo("nl-NL"));


Iemand een idee wat ik verkeerd doe, of hoe het anders kan zodat het wel werkt?

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:46
Als je het formaat zelf wilt vastleggen (hard coderen), dan moet je dus niet noodzakelijk met die CultureInfo objecten aan de slag, je kan het gewoon ook zo doen:

code:
1
2
DateTime dt = new DateTime ( .... );
dt.ToString ("dd/MM/yyyy");

https://fgheysels.github.io/


  • xos
  • Registratie: Januari 2002
  • Laatst online: 26-03 10:21
Dat heb ik ook reeds geprobeerd maar nog steeds niks.

Iets meer informatie over de manier van opslaan en ophalen. Misschien dat het daar fout gaat.

Ik maak gebruik van een Access 2003 db met een tabel met een datum/time veld zonder format.

In het form heb ik een *.forms.DateTimePicker. Met de volgende query sla ik de datum op:
code:
1
2
DateTime _Date = this.TxbDatum.Value;
INSERT INTO <knip> _Date <knip>

Vervolgens haal ik de waarde op met
code:
1
2
3
4
OleDbCommand Command = new OleDbCommand(<knip>);
OleDbDataReader Reader = Command.ExecuteReader();
DateTime dt = Reader.GetDateTime(1);
this.TxbZoekDatum.Text = dt.ToString("dd/MM/yyyy");

Op deze manier krijg ik nog steeds de dag en de maand verkeerd wanneer de dag < 10 is.

Verwijderd

basterd schreef op 02 oktober 2004 @ 15:56:

Op deze manier krijg ik nog steeds de dag en de maand verkeerd wanneer de dag < 10 is.
Ik heb een klein vermoeden dat het zou kunnen zijn dat de maand en dag worden omgedraaid als een datum niet "kan" bestaan. Vergeet niet dat de notatie mm-dd-yyyy meer wordt gebruikt dan dd-mm-yyyy. Dit is uit te sluiten als het met datums als 10-11-2004 of 12-10-2004 niet wordt omgedraaid. Weet je héél zeker dat het wèl goed gaat als de dag 10 of hoger is, en niet 13 of hoger? Dat blijkt namelijk niet uit je voorbelden in de eerste post.

[ Voor 37% gewijzigd door Verwijderd op 02-10-2004 16:06 ]


  • xos
  • Registratie: Januari 2002
  • Laatst online: 26-03 10:21
Je hebt idd gelijk dat het bij "onmogelijke" datum wel goed gaat (datum's met een dag >12).

Ik kan natuurlijk zelf wat omschrijfwerk doen waarmee ik dit tegen ga. Alleen lijkt mij dit nogal een overbodige en vreemde manier.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14:37

gorgi_19

Kruimeltjes zijn weer op :9

Gaat het niet fout bij het inserten? Bij gebruik van een parametrized query hoort het probleem iig dan opgelost te zijn (het verschil wordt dan veroorzaakt door een verschil in taalinstellingen in frontend en backend)

Verder had MS Access als ik het goed had een eigenaardigheidje; het probeerde zelf een datum te corrigeren, waardoor je dus een datum soms omgekeerd opslaat.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • xos
  • Registratie: Januari 2002
  • Laatst online: 26-03 10:21
Ik heb het helemaal gehad met zoiets kleins dat ik maar een erg smerige workaround heb gemaakt. Ik sla de datum nu zowel in een datum veld op als in een text veld. Zo kan ik blijven zoeken op datum en gebruik ik het text veld maar voor de presentatie.

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

als het is zoals hierboven gesuggereerd, dat bij een onmogelijke maand de andere instelling wordt gekozen, en dat de default mm-dd-yyyy is, kun je het volgens mij wel oplossen door zelf de conversie te doen tussen mm-dd-yyyy dd-mm-yyyy...

ASSUME makes an ASS out of U and ME


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:46
basterd schreef op 03 oktober 2004 @ 00:19:
Ik heb het helemaal gehad met zoiets kleins dat ik maar een erg smerige workaround heb gemaakt. Ik sla de datum nu zowel in een datum veld op als in een text veld. Zo kan ik blijven zoeken op datum en gebruik ik het text veld maar voor de presentatie.
Hoe ziet de code eruit waarmee je de datum opslaat, maw, toon eens de C# code die je gebruikt om een OleDbCommand te maken, en hoe die query er precies uitziet.

https://fgheysels.github.io/


  • xos
  • Registratie: Januari 2002
  • Laatst online: 26-03 10:21
Ik gebruik de volgende code:
code:
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
private bool InsertQuery() 
        {
            
            DateTime _Date = this.TxbDatum.Value;
            string QueryBegin = "INSERT INTO auto(kenteken, eigenaar, datum, datum_text) Values(";
            string QueryEnd = "'" + this.TxbKenteken.Text + "','" + this.TxbEigenaar.Text + "',#" + _Date.ToShortDateString() + "#,'" + _Date.ToShortDateString() +"')";
            OleDbCommand Command = new OleDbCommand(QueryBegin + QueryEnd, Connection);
                                                                                                
            try 
            {
                Connection.Open();
                Command.ExecuteNonQuery();

            } 
            catch (Exception ex) 
            {
                MessageBox.Show("Connectie error.\n\n" + ex.ToString());

                return false;
            } 
            finally 
            {
                Connection.Close();
            }

            return true;
        }


Enige verschil met de feitelijke query is dat ik een hele berg aan boolean parameters heb weggehaald om de layout niet al te erg om zeep te helpen. Deze zitten allemaal na de datum parameter.

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:46
Gebruik eens een parametrized query ipv dat je je string opbouwt adhv string concatenation.

klik

https://fgheysels.github.io/

Pagina: 1