Autor Téma: Dátum - nerozumiem mu  (Přečteno 1137 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7401
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Dátum - nerozumiem mu
« kdy: 29-05-2023, 18:23:27 »
Dostal som údaje z Paradox-u. Jedno pole je Date. Je tam hodnota 00:00,0. Dal som to do Excel-u. Ak som vybral bunku, tak ukazoval rôzne hodnoty. Keď som bunky naformátoval ako Dátum, tak sa to všetko zobrazilo.
Ako to vlastne funguje. Niečo také som ešte nevidel.
Najnižší dátum má divnú hodnotu 0.1.1900
K tomu mám zhruba 200 záznamov s takými: 01.04.1893 00:00:00,000. To podľa všetkého nedostanem do svojej DB tabuľky.
Ďakujem
« Poslední změna: 29-05-2023, 18:43:07 od Stanislav Hruška »
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Padawan
  • ******
  • Příspěvků: 1576
  • Karma: 52
    • Verze Delphi: 11.3
Re:Dátum - nerozumiem mu
« Odpověď #1 kdy: 29-05-2023, 18:51:23 »
Ty hodnoty jsou hádám jen různým způsobem pomršené NULL, ne?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7401
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Dátum - nerozumiem mu
« Odpověď #2 kdy: 29-05-2023, 18:57:33 »
Ako to mám vedieť? Opýtam sa na to. Mám aj prázdne stĺpce - to sú určite null.

Zistil som, že Excel pozná dátumu až od 1.1.1900 hore
Náhodne to asi nie je. Ak skáčem z bunky na bunku, tak v jednotlivých bunkách vždy dostanem jedinú, tú istú hodnotu.
« Poslední změna: 29-05-2023, 19:04:17 od Stanislav Hruška »
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 442
  • Karma: 6
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Dátum - nerozumiem mu
« Odpověď #3 kdy: 29-05-2023, 19:05:03 »
Datum je celá část čísla, desetinná část je čas.
To, že je Excel hloupý, s tím ti nepomůžu. Datumy pod 1.1.1900 zobrazí, ale neumí s nimi jako s datumy pracovat. A tudíž je ani nepřevede třeba z tvé tabulky.
Když to tvé "datumové" pole načteš jako Float, tak dostaneš co?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7401
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Dátum - nerozumiem mu
« Odpověď #4 kdy: 29-05-2023, 19:21:32 »

Nebralo mi to ani pre dátum.Toto:
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7401
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Dátum - nerozumiem mu
« Odpověď #5 kdy: 29-05-2023, 19:33:09 »
Hm, v originále csv som to mal takto:
04.05.1968 00:00:00,00
Odrezal som posledné ":00,00" a už to vyzerá dobre.
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7401
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Dátum - nerozumiem mu
« Odpověď #6 kdy: 29-05-2023, 20:03:28 »
Prečo sa mu nepáčia tieto dátumy? Ako ho môžem presvedčiť DB manažér o správnosti dátumov? Zo 117 845 záznamov mi zoberie 3 599. Iba hodnoty null.
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 623
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005 .. D Tokyo 10.2.3 Pro C/S
Re:Dátum - nerozumiem mu
« Odpověď #7 kdy: 29-05-2023, 22:26:14 »
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:
Kód: Delphi [Vybrat]
  1. var
  2.   dt: TDateTime;
  3.   r: Extended;
  4. begin
  5.   dt := strToDateTime('01.01.0001'); // valid
  6.   r := dt;                           // -693593
  7.   dt := r - 1;                       // debugger 00.00.0000, alias extended -693594
  8.   r := dt;                           // -693594
  9.   dt := strToDateTime('00.00.0000'); // inavalid
« Poslední změna: 29-05-2023, 22:57:15 od miroB »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7401
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Dátum - nerozumiem mu
« Odpověď #8 kdy: 30-05-2023, 09:31:07 »
Ja som to vyriešil nakoniec tak, že som úplne odstránil časovú časť. DB manažér s ňou nebol spokojný. Aj tak nebola využitá.
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 623
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005 .. D Tokyo 10.2.3 Pro C/S
Re:Dátum - nerozumiem mu
« Odpověď #9 kdy: 07-06-2023, 19:06:27 »
Ja som to vyriešil nakoniec tak, že som úplne odstránil časovú časť. DB manažér s ňou nebol spokojný. Aj tak nebola využitá.
Celkom dosť záleží na tom, ako "odstrániš" časovú časť.
Sú dve možnosti prevodu typu Double/Extended na Integer.
A./ Zaokrúhlenie. To by bola chyba, pretože po 12:00 dostaneš výsledok, ktorý ziodpovedú nasledujúcemu dňu
B./ "Odtrhnutie", tuším je to pomocou funkcie Trunc. Vtedy dátum z DateTime reprezentuje vždy správny deň

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7401
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Dátum - nerozumiem mu
« Odpověď #10 kdy: 07-06-2023, 21:02:04 »
Ja som to robil v csv súbore. Čiže v textovom editore. Funkcia Repleace.
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.