Keď uvedieš len "invalidné" dátumy, tak je ťažké určiť presnú chybu.
Môže ísť o klasiku, kde je v hre poradie "d.m.yyyy" vs. "yyyy.m.d" vs "yyyy.d.m" ..
alebo oddeľovač dátumov "/", ".", "-".
To sú základy nekonečného príbehu inkompatibility.
A v tvojom prípade aj zjavný fakt, že
"00:00,00" (invalid floating point..) nie je to isté ako plnokrvný čas:
"00:00:00,00"
alebo
"00:00:00.00"
V prípade "Orezal som :00,00" zase nasvedčuje, že desatinná
bodka, resp. inde
čiarka sa nezhodujú.
Excel má limit ako píšeš: jeho "spodný" limit na dátum je integer(0).
DateTime je float formát, ale samotný dátum (bez času) je reprezentovaný celým číslom (počet dní od 1.1.1900 po predmetný dátum).
Horná hranica dátumu v rámci integer je myslím zhodná pre Excel aj pre Delphi, či MS Access.( "31.12.9999" )
Excel a Delphi a aj Access sú kompatibilné (priamo v princípe uloženia ako typ extended).
Smola, že len Excel nejde aj do tých záporných čísel. Preto končí zdola niekde na 01.01.1900
Na dolnej strane (začiatok roka 1900) je jednodňová nekompatibilita Excelu a Accessu. Chyba je historicky daná tuším z Lotusu, alebo Calc-u
Excel tú chybu schválne preberá aj keď sa o nej vedelo (Nejaký prestupný rok, či ako.
Od marca 1900 hore sú však dátumy kompatibilné s databázami Access, SQL Server .. ).
A netuším prečo nejde Excel do záporných čísel, tak by zvládal aj dátumy pred rokom 1900.
Myslím, že Delphi umožní niečo ako StrToDateTime( '01.01.0001'). Viď aj príklad kódu dolu.
Vyskúšaj si toto:
var
dt: TDateTime;
r: Extended;
begin
dt := strToDateTime('01.01.0001'); // valid
r := dt; // -693593
dt := r - 1; // debugger 00.00.0000, alias extended -693594
r := dt; // -693594
dt := strToDateTime('00.00.0000'); // inavalid