• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1001
  • Last Modified:

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 ??
0
Jeb
Asked:
Jeb
  • 2
  • 2
  • 2
  • +3
1 Solution
 
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
 
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
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
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
 
slautinCommented:
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
 
JebAuthor Commented:
ShortDateFormat :='dd/mm/yy' worked !!
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

  • 2
  • 2
  • 2
  • +3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now