Icon View Thread

The following is the text of the current message along with any replies.
Messages 1 to 3 of 3 total
Thread Pascal-Newbie needs advice: How to check and format a date?
Wed, Aug 29 2012 4:25 AMPermanent Link

Peter

Hello,

i want to convert a date (enter by a user) into a string with the
following format: 'yyyymmdd' (regarding leading zeros).

01.02.2012 -> 20120101
1.2.2012 -> 20120201

I also want to check if a given date is valid.

01.12.2021 -> Valid
33.12.2021 -> Invalid

At the moment, the DateTime-Functions of EWB and my Pascal-Skills are
limited, so i have no idea to solve this problem.

Can somebody give me clue?

Thanks in advance & Greetings ... Peter

--
Sorry for my weird english
Wed, Aug 29 2012 10:05 AMPermanent Link

William

=?ISO-8859-15?Q?Peter_T=FCbben?= wrote:

Hello,

i want to convert a date (enter by a user) into a string with the
following format: 'yyyymmdd' (regarding leading zeros).

01.02.2012 -> 20120101
1.2.2012 -> 20120201

I also want to check if a given date is valid.

01.12.2021 -> Valid
33.12.2021 -> Invalid

At the moment, the DateTime-Functions of EWB and my Pascal-Skills are
limited, so i have no idea to solve this problem.

Can somebody give me clue?

----

I assume you are asking how to validate a properly formatted entry, and not raw text?

You need to validate the month as 1 <= month <= 12.
You need to determine whether the year is a leap year.
Once you know whether it's a leap year, you can validate the number of days in the month.

I'm very new to EWB, so am not offering working code at this point. According to the language manual, there is no support for sets, so you could do something like:

var
 validDay: Boolean;

 if (1 <= month) and (month <= 12) then // valid month
   case month of
     1, 3, 5, 7, 8, 10, 12: // months with 31 days
        validDay := (1 <= day) and ( day <= 31);
      4, 6, 9, 11: // months with 30 days
        validDay := (1 <= day) and (day <= 30);
   else
      if IsLeapYear( year ) then
        validDay := (1 <= day) and (day <= 29)
      else
        validDay := (1 <= day) and (day <= 28);
   end;

You can write IsLeapYear with very little effort.

However, if you are starting from text which may or may not be correctly formatted to represent a date, then the answer you need is much more involved.
Wed, Aug 29 2012 11:25 AMPermanent Link

Peter

Hello William,

Thanks for your response! Your solution looks good (as far as I can
judge Wink!

> You can write IsLeapYear with very little effort.

Here is my implementation:

function IsLeapYear(Year: Integer): Boolean;
begin

  If ( ( Year Mod 4 ) = 0 And ( Year Mod 100 ) <> 0 ) Or ( Year Mod 400
) = 0 Then
    Result := True
  Else
    Result := False;

end;


Thanks again & Greetings ... Peter

--
Sorry for my weird english
Image