Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StrToDate (https://www.delphipraxis.net/114882-strtodate.html)

API 2. Jun 2008 12:04


StrToDate
 
Hallo,

Warum funktioniert diese Zeit Umwandlung nicht? Habe ich etwas übersehen?
(D6: function StrToDate(const S: string): TDateTime;)

Delphi-Quellcode:
var
  DateStr :string;
begin
  ShortMonthNames[5] := 'Mai';
  DateStr := '23-Mai-2008';
  DateSeparator := '-';
  LongDateFormat := 'dd-mmm-yyyy';
  DateTimePicker1.DateTime := StrToDate(DateStr);
end;

Zitat:

---------------------------
Project1
---------------------------
'23-Mai-2008' is not a valid date and time.
---------------------------
OK
---------------------------

Alien426 2. Jun 2008 12:07

Re: StrToDate
 
Mai?!

API 2. Jun 2008 12:08

Re: StrToDate
 
Zitat:

Zitat von Alien426
Mai?!

Ja, "Mai" ist Deutsch.

lbccaleb 2. Jun 2008 12:12

Re: StrToDate
 
Zitat:

Zitat von API
Zitat:

Zitat von Alien426
Mai?!

Ja, "Mai" ist Deutsch.

ja du brauchst aber englisch, also "May"!

tomsel 2. Jun 2008 12:13

Re: StrToDate
 
Ich würd mal sagen, nach dem Monatsnamen darf kein Separator kommen, aber :?:

Wieso soll er englisch brauchen?

API 2. Jun 2008 12:18

Re: StrToDate
 
Zitat:

Zitat von lbccaleb
Zitat:

Zitat von API
Zitat:

Zitat von Alien426
Mai?!

Ja, "Mai" ist Deutsch.

ja du brauchst aber englisch, also "May"!

Wo brauche ich Englisch? Es steht ja überall "Mai"



Zitat:

Zitat von tomsel
Ich würd mal sagen, nach dem Monatsnamen darf kein Separator kommen, aber :?:

Das Datum DateStr ist vorgegeben. Aber auch wenn der Separator weggelassen wird, geht's nicht.

mkinzler 2. Jun 2008 12:22

Re: StrToDate
 
Versuch es mal mit der überladenen Variante der Funktion

API 2. Jun 2008 12:34

Re: StrToDate
 
Zitat:

Zitat von mkinzler
Versuch es mal mit der überladenen Variante der Funktion

Unter D6 gibt's keine überladene Funktion.

tomsel 2. Jun 2008 12:34

Re: StrToDate
 
OH: "Die Reihenfolge von Tag, Monat und Jahr wird von der globalen Variable ShortDateFormat ... bestimmt"

... und nicht LongDateFormat

API 2. Jun 2008 12:43

Re: StrToDate
 
Zitat:

Zitat von tomsel
OH: "Die Reihenfolge von Tag, Monat und Jahr wird von der globalen Variable ShortDateFormat ... bestimmt"

... und nicht LongDateFormat

Das habe ich zuvor auch schon probiert geht aber auch nicht:

Delphi-Quellcode:
ShortDateFormat := 'dd-mmm-yyyy';
oder
Delphi-Quellcode:
ShortDateFormat := 'd/m/y';

mkinzler 2. Jun 2008 12:48

Re: StrToDate
 
Zerlege den String und erzeuge daraus das Datum

Hawkeye219 2. Jun 2008 13:03

Re: StrToDate
 
Hallo,

vielleicht hilft dieser Beitrag.

Gruß Hawkeye

API 2. Jun 2008 13:52

Re: StrToDate
 
Zitat:

Zitat von Hawkeye219
Hallo,

vielleicht hilft dieser Beitrag.

Gruß Hawkeye

Unter D6 gibt es, wie bereits geschrieben, leider keine überladene StrToDate() Funktion.

marabu 2. Jun 2008 14:30

Re: StrToDate
 
Hallo,

das Prinzip bleibt das gleiche:

Delphi-Quellcode:
function StrToDate(s: string): TDateTime;
var
  iMonth, nMonth: Integer;
  sMonth: string;
begin
  iMonth := Pos('mmm', ShortDateFormat);
  if iMonth > 0 then
  begin
    sMonth := Copy(s, iMonth, 3);
    nMonth := Low(ShortMonthNames) + AnsiIndexText(sMonth, ShortMonthNames);
    Str(nMonth:2, sMonth);
    s := StuffString(s, iMonth, 3, sMonth);
  end;
  Result := SysUtils.StrToDate(s);
end;
Grüße vom marabu

raiguen 2. Jun 2008 15:19

Re: StrToDate
 
Zitat:

Zitat von Delphi-OH
Beschreibung

Mit StrToDate kann ein String mit einer Datumsangabe geparst werden. Enthält S kein gültiges Datum, wird eine EConvertError-Exception ausgelöst.

Der String muss aus zwei oder drei Zahlen bestehen, die durch das in der globalen Variable DateSeparator bzw. deren TFormatSettings-Entsprechung definierte Zeichen voneinander getrennt sind. Die Reihenfolge von Tag, Monat und Jahr wird von der globalen Variable ShortDateFormat bzw. deren TFormatSettings-Entsprechung bestimmt (mögliche Kombinationen sind M/T/J, T/M/J und J/M/T).

Also wird dir nichst naderes übrig bleiben, als den von marabu vorgeschlagenen Weg zu gehen und den Datumstring entsprechend zu bearbeiten, dass dieser für StrToDate()-Funktion zureichend ist (also NUR Zahlen!)..

API 2. Jun 2008 17:39

Re: StrToDate
 
@marabu. Danke! Das funktioniert endlich.

Verwende die Funktion nun so:

Delphi-Quellcode:
function StrToDateTime(s: string): TDateTime;
var
  iMonth, nMonth: Integer;
  sMonth: string;
begin
  iMonth := Pos('mmm', ShortDateFormat);
  if iMonth > 0 then
  begin
    sMonth := Copy(s, iMonth, 3);
    nMonth := Low(ShortMonthNames) + StrUtils.AnsiIndexText(sMonth, ShortMonthNames);
    Str(nMonth:2, sMonth);
    s := StuffString(s, iMonth, 3, sMonth);
  end;
  Result := SysUtils.StrToDateTime(s);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  DateStr: string;
  dtDateTime: TDateTime;
Begin
  DateStr := '23-Mai-2008 17:01';
  DateSeparator := '-';
  TimeSeparator := ':';
  ShortDateFormat := 'dd.mmm.yyyy';
  dtDateTime := StrToDateTime(DateStr);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz