Avatar billede sorenriis Nybegynder
25. januar 2006 - 00:22 Der er 7 kommentarer og
2 løsninger

Dato-problemer

Jeg har et problem med datoer i delphi.

Hvis en dansker kører mit program virker det fint.
Men hvis en svensker kører programmet, sker der en fejl da han kører efter formatet "mm-dd-yyyy" og ikke "dd-mm-yyyy" som vi gør i Danmark.

Hvordan løser jeg det?

Programmet får en dato ind i formatet "dd-mm-yyyy" (tekststreng), som så konverteres til en TDateTime vha. DateTimeToFileDate(StrToDateTime(Dato)).

Hvordan laver jeg det sådan at det også virker for folk, som bruger et andet dataformat?
Avatar billede kroning Nybegynder
25. januar 2006 - 00:41 #1
Hvad med dette i f.eks. din OnCreate:
Application.UpdateFormatSettings:=false;
ShortDateFormat:='dd-mm-yyyy';
Avatar billede hrc Mester
25. januar 2006 - 08:37 #2
var
  Dato : TDateTime;
begin
  Dato := now;
  Caption := FormatDateTime('DDMMYYYY',Dato);
end;

Troede i øvrigt ikke at DateToStr() var en Delphi-funktion, men der ligger en mother-f funktion i vcl'et.
Avatar billede hrc Mester
25. januar 2006 - 08:38 #3
Undskyld. Sådan her:

  Caption := FormatDateTime('DD"-"MM"-"YYYY',Dato);
Avatar billede sorenriis Nybegynder
25. januar 2006 - 12:48 #4
Løser FormatDateTime mit problem?
Problemet er jo at jeg skal have konverteret en streng indenholdende en dato over til TDataTime-format.

Hvis nu strengen er af dette format:
DatoStreng:='mm-dd-yyy';
men Delphi forudsætter jo at den er af dette format:
DatoStreng:='dd-mm-yyy';

Programmet går ned her, hvis jeg prøver det.

Kroning > Har endnu ikke kunne få testet om det der virker på en "udenlandsk" pc. Vender tilbage hurtigst muligt.
Avatar billede hrc Mester
25. januar 2006 - 15:03 #5
Min fejl. Det må være noget med at snuppe ShortDateFormat og identificere hvor de forskellige elementer er i strengen:

function TForm1.DecodeMyDate1(const aLocalizedDate: String): TDateTime;
var
  pd, pm, pyyy : integer;
begin
  // Den primitive, simple:
  pd := pos('dd',ShortDateFormat);
  pm := pos('mm',ShortDateFormat);
  pyyy := pos('yyyy',ShortDateFormat);

  result := EncodeDate(StrToInt(copy(aLocalizedDate,pyyy,4)),
                      StrToInt(copy(aLocalizedDate,pm,2)),
                      StrToInt(copy(aLocalizedDate,pd,2)));
end;

function TForm1.DecodeMyDate2(const aLocalizedDate: String): TDateTime;
var
  FormatSettings : TFormatSettings;
begin
  // Den bedste løsning er nok denne:
  // Se: http://delphi.about.com/library/rtl/blrtlGetLocaleFormatSettings.htm
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FormatSettings);
  result := StrToDate(aLocalizedDate, FormatSettings);
end;
Avatar billede bonzai Nybegynder
27. januar 2006 - 08:31 #6
Jeg sad med samme problem for noget tid siden.
Jeg løste det lidt ligesom hrc, bare lidt mere primitivt.

var
  dato : TDate;

dato := EncodeDate(strToInt(strDate[7]+strDate[8]+strDate[9]+strDate[10]), StrToInt(strDate[4]+strDate[5]), StrToInt(strDate[1]+strDate[2]));
Avatar billede sorenriis Nybegynder
27. januar 2006 - 10:50 #7
Tak for svaret.

Jeg har prøvet den løsning Kroning foreslår nu og det virker perfekt.
Så hvis I lige afgiver svar, så deler jeg points ud :-)
Avatar billede kroning Nybegynder
27. januar 2006 - 13:27 #8
svar
Avatar billede hrc Mester
31. januar 2006 - 23:21 #9
Lige et slag for den sidste af mine løsningsforslag. Det er nok (i al beskedenhed) den rigtigste af bruge da den også vil fungere i Langbortistan. Svaret har du fra tidligere.
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
Kurser inden for grundlæggende programmering

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