Avatar billede jisch Mester
22. januar 2010 - 12:42 Der er 5 kommentarer og
1 løsning

StrToDate og Windows 7

Hej,
For år tilbage har jeg lavet flere programmer der anvender funktionen StrToDate (skrevet i Delphi 7). Disse programmer har altid virket i Windows XP og Vista. Efter at have skiftet til Windows 7 virker det ikke??? Min Windows 7 er sat op til DK med datoformat 'dd-mm-yyyy'. Jeg har lavet et lille testprogram, der viser at det IKKE virker. Programmet er skrevet i Delphi 2009.

procedure TForm1.Button1Click(Sender: TObject);
Var
  D: String;
  DD: TDateTime;
begin
  D:='12-04-2003';
  DD:=StrToDate(D);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.UpdateFormatSettings:=false;
  ShortDateFormat:='dd-mm-yyyy';
end;

Jeg får fejlmeddelelsen '12-04-2003' is not a valid date.

Uden Procedure FormCreate kan jeg detektere at Delphi har ShortDateFormat 'M/d/yyyy'. Hvis jeg skriver D:='4/12/2003' virker det!!

Hvad sker der??
Avatar billede flope Nybegynder
22. januar 2010 - 12:47 #1
har du ikke mulighed for at udskrive "Datetime Now", så du evt. kan se om det er den rigtige dato-format. Måske skrives det med "/" istedet for "-" eller også godtager den måske ikke "04" men istedet "4"

Der kan være mange små fiduser i det her.

Mvh. Nicolai
22. januar 2010 - 12:52 #2
Hej

Dit problem ligger i din definition af TIDSFORMATET.

Se lidt på kommndoerne

ShortDateFormat / LongDateformat

finder du årsagen.

Held og lykke

(Er på job nu - derfor det lidt korte svar- middagspause..)

KRIS
Avatar billede jisch Mester
22. januar 2010 - 13:26 #3
>Flope & snestrup. Tak for svar, men det løser ikke rigtigt mit problem. Jeg har en fornemmelse af at jeg skal skive noget kode der finder ud af hvilket datoformat Delphi bruger og konvertere mine datoer til det format.
Avatar billede arne_v Ekspert
23. januar 2010 - 04:06 #4
Du skal bare sige please til Delphi !

Demo:

program dfmt;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  fmt : TFormatSettings;
 
begin
  fmt.DateSeparator := '-';
  fmt.ShortDateFormat := 'dd mm yyyy';
  writeln(datetostr(strtodate('12-04-2003', fmt)));
  fmt.DateSeparator := '/';
  fmt.ShortDateFormat := 'm d yyyy';
  writeln(datetostr(strtodate('4/12/2003', fmt)));
  readln;
end.
Avatar billede jisch Mester
23. januar 2010 - 23:35 #5
>alle: Tak for svar.

>arne_v: Dit eksempel virker ikke? Output bliver det samme i begge tilfælde, nemlig 4/12/2003. Jeg tror mere at inkompabiliteten ligger i windows 7. Jeg har imidlertid skrevet noget kode, der virker i alle windows/Delphi systemer:

procedure TForm1.Button1Click(Sender: TObject);
Var
  D: String;
  DD: TDateTime;
begin
  D:='12-04-2003';
  DD:=ConvertDKDate(D);
  Label1.Caption:=DateToStr(DD);
  ShortDateFormat:='dd-mm-yyyy';
  Label2.Caption:=DateToStr(DD);
end;

Function TForm1.ConvertDKDate(DKDate: String): TDateTime;
Var
  DD, MM, YYYY: Integer;
Begin
  DD:=StrToInt(Copy(DKDate, 1, 2));
  MM:=StrToInt(Copy(DKDate, 4, 2));
  YYYY:=StrToInt(Copy(DKDate, 7, 4));
  ConvertDKDate:=EncodeDate(YYYY, MM, DD);
End;
Avatar billede arne_v Ekspert
24. januar 2010 - 00:05 #6
At min kode udskriver det samme i begge tilfælder viser netop at den virker !!

strtodate kan parse det format man beder den parse.

(hvis du ikke kan lide det format datetostr skriver i, så tager den også en parameter 2 med format)
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