TDateTime and StrToDate problem(Convertionerror)

I got a problem with the TDateTime type !!
It works fine with most Dateformats but
When windows date is set to dd-mmm-yy (09-nov-98) the
function StrToDate or DateToStr doesn't work !!
I get an EConvertionError exception and a '09-nov-98' is not
a valid date !! Is there another way to convert between String and TDateTime ??
JebAsked:
Who is Participating?
 
slautinConnect With a Mentor Commented:
Function DateToStr work fine in all cases with Windows setuped format.
About StrToDate function:
The string must consist of two or three numbers but NOT CHARACTERS, separated by the character defined by the DateSeparator global variable.
The order for month, day, and year is determined by the ShortDateFormat global variable--possible combinations are m/d/y, d/m/y, and y/m/d.

Again, pay attention to DateSeparator and ShortDateFormat.

For example:

//system date format 'dd-mmm-yy'

procedure TForm1.Button1Click(Sender: TObject);
var
   td : TDateTime;
begin
   ShortDateFormat :='dd/mm/yy';
   //Edit1.Text := '40-01-1998';
   Edit2.Text:=DateToStr(StrToDate(Edit1.Text));
   td := StrToDate(Edit2.Text);  
   Edit3.Text:=DateToStr(td); //display '04-01-98'
end;
0
 
Stuart_JohnsonCommented:
Try setting this in your FormCreate or FormShow procedures:

   ShortDateFormat := 'DD/MM/YYYY';

It _should_ convert your dates over to this format on in Delphi.

Hope it helps,

Stuart.
0
 
bozo7Commented:
ShortDateFormat does not work all the time. I have had problems with it working on all machines.
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
Stuart_JohnsonCommented:
Sounds like a very strange problem.  We write software using D1, D2 and D4 which is shipped around the globe, and never have we encountered a problem like this.

Stu
0
 
BlackDeathCommented:
hi, jeb. hi, all.

i agree: there are certain difficulties with StrToDate / DateToStr.
at least you should make sure "DateSeparator" is set properly.
but even with this i can't get a conversion from an input like '09-nov-98' working.
all i can manage is to convert '09-11-98'.

i think the problem is indeed in ShortDateFormat. StrToDate determines the sequence of day, month and year on ShortDateFormat.
and ShortDateFormat only accepts d, dd, m, mm, yy, yyyy.
mmm is not included and thus, i'm afraid, you can't use ShortMonthNames for input to conversion from String to TDateTime.

or am i wrong with this?

alas, no big help.

Black Death.

0
 
sassas081597Commented:
How about creating your own StrToDate and DateToStr routine:
function MyDateToStr(V: TDateTime): ShortString;
var d,m,y: Integer;
begin
   DecodeDate(V,d,m,y);
   if D<10 then Result:='0';
   Result:=Result + intToStr(d);
   case M of
   1: Result:=Result + 'Jan';
   2:...
   12:...
   end;
   Result:=Result+IntToStr(y);
end;

function MyStrToDate(V: String, Divider: string[1]): TDateTime;
begin
   ...
end;
0
 
slautinCommented:
Why do you not use FormatDateTime function?
0
 
bozo7Commented:
That seems to me that the FormatDateTime would be a good solution. As long as the date has the four digit year. If you only have the 2 digit year you lose some Y2K compatability.

One question is: Are you using the datetostr and strtodate for display purposes or for storing in a table?
0
 
JebAuthor Commented:
ShortDateFormat :='dd/mm/yy' worked !!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.