[Lazarus] date function db_date();

Michael Van Canneyt michael at freepascal.org
Tue Jul 5 08:47:15 CEST 2016



On Mon, 4 Jul 2016, Larry Dalton wrote:

> I use the following function to read a date from a Libre Office dbase file.
> The field is stored as
>
> a string, ie '04/08/2016'.
>
>
> function db_date(const dog_base:tdbf;const t_field:string):tdatetime;
>
> var test_date:tdatetime;
>
> test_bool:boolean;
>
> test_string:string;
>
> begin {starts function db_date(const dog_base:tdbf;const
> t_field:string):tdatetime;}
>
> test_bool:=dog_base.FieldByName(t_field).Value<>null;
>
> if test_bool then test_date:=dog_base.FieldByName(t_field).AsDateTime
>
> else test_date:=now;
>
> result:=test_date;
>
> end; {ends function db_date(const dog_base:tdbf;const
> t_field:string):tdatetime;}
>
> I am running lazarus 1.6, on both Windows 8 and Linux Mint 17. The above
> function works fine on the Windows 8 box, but on the Linux Mint box, I get
> the following error: “04/08/2016” is not a valid date format. Why does it
> work on Windows but not Linux? How can I rewrite it to work on both?

under linux, add the clocale unit to the uses clause of your project.
Make sure that the locale is set to the correct locale.

Alternatively, set
   DefaultFormatSettings.ShortDateFormat:='dd/mm/yyyy';
   DefaultFormatSettings.DateSeparator:='/';
at the start of your program or input routine.

Yet another way would be to use the scandatetime function

test_date:=scanDateTime('dd/mm/yyyy',dog_base.FieldByName(t_field).AsString);

See
http://www.freepascal.org/docs-html/rtl/dateutils/scandatetime.html



Michael.


More information about the Lazarus mailing list