[fpc-devel] Behavior of conversion between vardate variants and string in fpc and delphi

Sergei Gorelkin sergei_gorelkin at mail.ru
Mon Apr 4 07:28:21 CEST 2011

Luiz Americo Pereira Camara пишет:
> So, what should be done?
> 1) Be totally compatible with Delphi: convert date to string with 
> hardcoded format and raise exception when doing the conversion back?
> 2) Use the hardcoded format used to convert from vardate variant to 
> string and vice versa?
> 3) Use shortdateformat to convert from vardate variant to string and 
> vice versa?
> As pointed in http://support.embarcadero.com/article/35913 the hardcoded 
> is not hardcoded at all. It's the default system setting.
> It's a mater of considering where is the Delphi bug. It should use 
> ShortDateFormat to do the vardate to string conversion ? Should the 
> inverse conversion (string to vardate) be allowed at all?
Unfortunately I don't have recent Delphi, but here are results of some quick testing with Delphi 7:

a) Only *assignment* Variant -> TDateTime is broken, explicit casting (e.g. VarAsType(v, varDate)) 
b) Conversion is done using Windows API (in general, everything Delphi can't or doesn't do itself, 
it passes on to Windows), having its pros and cons:

test('12 января 2011') -> 12.01.2011     Works, assuming locale is Russian
test('04/07/1999') -> 04.07.1999
test('04/17/1999') -> 17.04.1999         Do you really want day and month swapped?

function test(const s: string): string;
   v,v1: variant;
   d: tdatetime;
   v := s;
   {d := v;}         // broken
   v1 := VarAsType(v, varDate);
   d := v1;
   result := DateTimeToStr(d);


More information about the fpc-devel mailing list