Solved

TDateTime and StrToDate problem(Convertionerror)

Posted on 1998-11-09
9
987 Views
Last Modified: 2008-02-20
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
Comment
Question by:Jeb
  • 2
  • 2
  • 2
  • +3
9 Comments
 
LVL 6

Expert Comment

by:Stuart_Johnson
Comment Utility
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
 
LVL 1

Expert Comment

by:bozo7
Comment Utility
ShortDateFormat does not work all the time. I have had problems with it working on all machines.
0
 
LVL 6

Expert Comment

by:Stuart_Johnson
Comment Utility
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
 
LVL 1

Expert Comment

by:BlackDeath
Comment Utility
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
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 1

Expert Comment

by:sassas081597
Comment Utility
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
 
LVL 1

Expert Comment

by:slautin
Comment Utility
Why do you not use FormatDateTime function?
0
 
LVL 1

Expert Comment

by:bozo7
Comment Utility
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
 
LVL 1

Accepted Solution

by:
slautin earned 10 total points
Comment Utility
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
 

Author Comment

by:Jeb
Comment Utility
ShortDateFormat :='dd/mm/yy' worked !!
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now