Format datuma Windows 10

Vse drugo, kar ne spada v nobeno zgornjo kategorijo.
Odgovori
zippo
Prispevkov: 263
Pridružen: 14.07.2002 12:11:29

Format datuma Windows 10

Odgovor Napisal/-a zippo » 17.10.2018 11:19:44

Pozdrav, klapa!

Zanima me, kako vi programreji rešujete problem, ki ga imam z Delphi 10.2 in windows 10. Imam namreč precej problemov za presledkom v formatu datuma, ki ga uporablja Windows 10. Primer je "01. 01. 2018".

Problem se pojavi pri npr. TDateEdit, ki javi napako, da ni veljaven format datuma.

Imate tudi vi tak problem? Če ja, kako ga rešujete?

Miha-R
Prispevkov: 2155
Pridružen: 14.05.2001 21:29:53

Re: Format datuma Windows 10

Odgovor Napisal/-a Miha-R » 17.10.2018 11:58:59

Takole smo to rešili v naših programih:

1. Uporabimo initialization sekcijo in preverimo, če FormatSettings.ShortDateFormat vsebuje kakršenkoli presledek poleg običajne in pričakovane pike.
2. S funkcijo TryStrToDate preverimo, ali smo sposobni datum spremeniti v tekst in nazaj.
3. Če pride do težav, uporabimo knjižnico Delphi Detours Library in funkcijo InterceptCreate, da:
3.1. preusmerimo APIje GetLocaleChar, GetLocaleFormatSettings in GetFormatSettings v naše lokalne funkcije.
3.2. v preusmerjenih funkcijah najprej kličemo original, nato še prenastavimo FormatSettings.DateSeparator nazaj na '.' (brez presledka)
4. V finalization morebitno preusmeritev odstranimo.

Vse skupaj imamo zapakirano v unit, ki ga vključimo v .dpr čimvišje na spisku vseh unitov.
Vedno sem želel napisati prav tak odgovor.

zippo
Prispevkov: 263
Pridružen: 14.07.2002 12:11:29

Re: Format datuma Windows 10

Odgovor Napisal/-a zippo » 17.10.2018 13:34:19

OK, hvala.

Morda se motim, ma kaj je tukaj Windows 10 napaka v datumu (kateri mi je res malo čuden s temi presledki...) ali Delphi nima podpore za Slovenske Win10?

V bistvu mi je malo zoprno, da v C# deluje BP, v Delphiju pa ne.

lp,
m@rko

Miha-R
Prispevkov: 2155
Pridružen: 14.05.2001 21:29:53

Re: Format datuma Windows 10

Odgovor Napisal/-a Miha-R » 17.10.2018 15:13:55

Win10 je spremenil zapis datuma za slovenski in hrvaški jezik. Win APIji so začeli kot DateSeparator vračati kombinacijo dveh znakov, pike in presledka. Delphi tu predvideva, da je za mejnik dovolj samo en znak in ko pretvarja tekst v datumski tip, uporabi napačen pristop in dobi napačen rezultat.

Pred dvema letoma, ko sem iskal rešitev, sem ugotovil, da je RTL koda v tem delu precej nesrečno spisana in je vprašanje, če bo sploh kdaj popravljeno. Sem pa zdajle našel ticket v njihovem sistemu in ja, po skoraj treh letih je še vedno odprt.
Vedno sem želel napisati prav tak odgovor.

Odgovori