Avatar billede vardox Nybegynder
22. februar 2006 - 23:44 Der er 21 kommentarer og
1 løsning

Gennemtving bestemt datoformat

Hey

Jeg er netop begyndt på C# og har nu banket hovedet mod den mur der hedder forskellige lande - forskellige datoformater. Jeg har kigget lidt hist og pist og er kommet frem til at det må være noget med at sætte culture til noget specifikt?

Helt konkret drejer det sig om, at jeg meget gerne vil have hele mit program til altid at bruge det engelske datoformat (yyyy-MM-dd HH:mm:ss).

Hvordan sikres det lettest?

Patrick
Avatar billede mosquito Nybegynder
23. februar 2006 - 00:37 #1
prøv med Cultureinfo fra namespace system.globalization

CultureInfo dateformat = new CultureInfo("en-US",false);

det skulle give et engelsk/amerikansk datoformat som ikke overskrives af brugerens landekode indstillinger i kontrolpanelet.

se evt her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemglobalizationcultureinfoclasstopic.asp
Avatar billede innercitydk Nybegynder
23. februar 2006 - 07:57 #2
Du styrer helt selv datoformatet i dit program. datofunktioner hard codes og har derofr intet at gøre med det specifikke systems tidsindstillinger.

Skriver du f.eks

DateTime.Now.ToString("d"); formateres datoen således: dd-mm-åååå

Hvis du skriver:

DateTime.Now.ToString("s"); formasteres datoen som du ønsker: åååå-dd-mm hh-mm-ss

Vh
Avatar billede vardox Nybegynder
23. februar 2006 - 13:26 #3
mosquito > Den teknik har jeg ikke formået at få noget ud af.

innercity > Hvordan vil du så konvertere den streng til en dato så substract osv. kan bruges?

Patrick
Avatar billede mosquito Nybegynder
23. februar 2006 - 15:20 #4
vardox > metoden bruges typisk hvis du ønsker din applikation skal understøtte flere sprog. Din default opsætning kunne da være engelsk, hvis ikke klientens sprog er defineret i koden. Men det er måske overkill hvis du kun ønsker at sikre et bestemt datoformat, som du jo også skriver.
Avatar billede arne_v Ekspert
23. februar 2006 - 15:34 #5
DateTime.Parse plejer at kunne gaette - ellers kan man ogsaa angive format
til ParseExact
Avatar billede innercitydk Nybegynder
23. februar 2006 - 22:03 #6
F.eks:

string dato = DateTime.Now.ToString("yyyy-mm-dd hh:mm:ss");

Du kan bare parse den normalt

DateTime dato2 = DateTime.Parse(dato);
Console.WriteLine(dato2.ToString("yyyy-mm-dd hh:mm:ss"));

Vh
Avatar billede vardox Nybegynder
23. februar 2006 - 22:41 #7
Jeg har desværre ikke mulighed for at kigge på jeres forslag før i morgen...
Avatar billede innercitydk Nybegynder
23. februar 2006 - 22:42 #8
bare i orden :)
Avatar billede vardox Nybegynder
24. februar 2006 - 23:28 #9
Hvis jeg gør som du skriver Innercity og først henter now.tostring og derefter smider den til en parse, så får jeg en fejl der siger, at min string ikke er et gyldigt datoformat. Vil jeg derimod bruge ParseExact ryger jeg ind i et nyt problem - IFormatProvider. Jeg har kigget på msdn og codeproject, men har ikke fundet en forklaring jeg får noget ud af. Hvordan virker disse helt konkret i forhold til følgende situation?

Jeg har en dato (_DT) i formattet "yyyy-mm-dd hh:mm:ss". Jeg skal have beregnet et timespan mellem nu og denne dato, men min dato er formateret engelsk og min dåse er dansk.

Patrick
String sNow = DateTime.Now.ToString("yyyy-mm-dd hh:mm:ss");
Avatar billede vardox Nybegynder
24. februar 2006 - 23:29 #10
ahh pokkers... den sidste linje skulle ikke have været med. Den forsvandt for mig i det her lille bitte textarea :o)
Avatar billede arne_v Ekspert
24. februar 2006 - 23:39 #11
proev:

DateTime.ParseExact(s, "yyyy-mm-dd hh:mm:ss", new CultureInfo("en-US", false), DateTimeStyles.AllowWhiteSpaces);
Avatar billede arne_v Ekspert
24. februar 2006 - 23:44 #12
er du helt sikker paa at du mener hh og ikke HH ??
Avatar billede vardox Nybegynder
25. februar 2006 - 00:09 #13
Hvis jeg kører den udgave af ParseExact, får jeg stadig en dato i dansk format.

Mht. hh/HH, er jeg endnu ikke inde i bogstavernes betydning. Det er bare, hvad jeg lige hurtigt har samlet op, samtidig med at jeg tænkte det ikke gjorde så meget, da det er angivet tidligere - en dårlig vane! Det jeg vil have er en dato i formatet "2006-02-25 00:09:00" - er det ikke "yyyy-MM-dd HH:mm:ss"?

Patrick
Avatar billede arne_v Ekspert
25. februar 2006 - 04:20 #14
ParseExact returnerer et DateTime objekt som er sprog uafhaengigt (en binaer tid)

hvis den ser dansk ud er det et udskrivnings problem

jeg mener at hh er timer 1-12 mens HH er timee 0-23
Avatar billede vardox Nybegynder
25. februar 2006 - 21:17 #15
Jeg får et dansk udseende format i debuggeren.
Avatar billede arne_v Ekspert
25. februar 2006 - 23:53 #16
hvis default er dansk formatering saa er det vel korrekt - men hele pointen er jo
at du skal bruge eksplicit formatering ikke default formatering
Avatar billede vardox Nybegynder
25. februar 2006 - 23:55 #17
Det er denne explicitte formatering jeg ikke ved, hvordan jeg skal gennemføre.
Avatar billede arne_v Ekspert
26. februar 2006 - 00:00 #18
det har innercitydk jo vist
Avatar billede vardox Nybegynder
26. februar 2006 - 00:26 #19
Hmm... smid et svar Innercity, så må jeg gå i DateTime-træningslejr.

Tak for hjælpen til jer alle :o)

Patrick
Avatar billede innercitydk Nybegynder
26. februar 2006 - 12:17 #20
Ok. Arne smid lige et svar også så deler vi :)
Avatar billede vardox Nybegynder
26. februar 2006 - 12:58 #21
ahh pokkers. Mente at man trykkede accepter og derefter, hvor mange point...
Avatar billede innercitydk Nybegynder
26. februar 2006 - 17:34 #22
Bare ok. Arne jeg har lavet et spm med 30 point :)

Vh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester