Uniezależnić się od lokalnych ustawień systemowych daty

0

Witam,

Ostatnio spotkałem się z takim problemem. Mam apkę z której korzysta większa liczba ludzi i w kodzie wykorzystuję czasami datę systemową z windy (np. czytam ją funkcją Date() ).
Przy standardowych ustawieniach nie ma problemu jednak jeżeli użytkownik ma ustawiony inny format daty apka się wykrzacza. Jak uniezależnić się od systemowego formatu daty ?? Oczywiście mogę zrobić coś takiego

Edit1->Text =  Date().FormatString("DD.MM.YYYY");

ale musiałbym pilnować wszystkich miejsc w apce. Czy jest możliwość ustawić jakieś globalne ustawienia żeby apka niezależnie od ustawień lokalnego formatu daty odczytywała go w odpowiedni dla mnie sposób ?

2

Frameworka oczywiście musimy się domyślić? Wygląda to jak VCL, ale pewności nie mam. Jeśli masz więcej takich miejsc to napisz własną funkcję formatującą datę i jej wszędzie używaj. Alternatywnie, możesz popatrzeć nad zmianą locale dla samej aplikacji. Albo możesz np. respektować ustawienia użytkownika (wiem, szalony pomysł) i po prostu naprawić błąd wywalający aplikację.

0

Projekt jest typu VCL.
Naprawienie błędu dla użytkownika nie wchodzi w grę bo za chwilę inny użytkownik zacznie tą apkę używać.
Z własną funkcją hmm .. myślałem już o tym ale doczytałem się na necie że właśnie można "ustawić" w apce takie ustawienia (chyba nawet właśnie przy użyciu jakichś funkcji "local" czy coś w tym rodzaju ale na razie wszystkie opisy na jakie trafiam w necie nie działają.
Jeżeli jest taka możliwość to chciałbym podejść do tematu kompleksowo :) własna funkcja to ostateczność.

0

Jakiego IDE używasz? Delphi / Lazarus / Typhone ?
Jaka wersja?

1
kq napisał(a):

Albo możesz np. respektować ustawienia użytkownika (wiem, szalony pomysł) i po prostu naprawić błąd wywalający aplikację.

Czemu? To nie taki szalony pomysł jak się wydaje. Wtedy mamy spójność pomiędzy systemami. Skoro user ustawił sobie format daty w systemie dd-mm-yyyy to czemu na siłę uszczęśliwiać go pokazując mu w programie w formie np. yyyy-mm-dd? Od czegoś są te ustawienia regionalne.

forritarik napisał(a):

Z własną funkcją hmm .. myślałem już o tym ale doczytałem się na necie że właśnie można "ustawić" w apce takie ustawienia (chyba nawet właśnie przy użyciu jakichś funkcji "local" czy coś w tym rodzaju ale na razie wszystkie opisy na jakie trafiam w necie nie działają.

A czego próbowałeś? Bo tu masz coś co powinno Ci pomóc Domyślny FormatSettings dla aplikacji

0

Używam Embarcadero C++ Builder 10.2 Tokyo

Powód dla którego chcę tak zrobić jest prosty. W apce korzystam z daty systemowej i w kilku komponentach ją wykorzystuję. W niektórych mam wstawiona maskę żeby data była wyświetlana w takie a nie inny sposób (tak apka była zbudowana przede mną i tak ma zostać, nie mam na to wpływu). Różnorodność ustawień regionalnych na kompach użytkowników powoduje wieczne błędy i w końcu chciałem się od tego uniezależnić.

Dzięki za linka dot. Formatsettings na pierwszy rzut oka o to mi chodziło, teraz tylko przerobić to z Delphi na C++ :)

Oczywiście jest to także bardzo przydatne w przypadku liczb zmiennoprzecinkowych. Standardowo separatorem jest "," ale niektórzy maja ustawioną w systemie "." i od tego także chciałem się uniezależnić.

0

Na razie na pustym małym projekcie gdzie sobie testowałem zadziałało wrzucenie kodu do głównej funkcji tWinMain kodu:

FormatSettings.ShortDateFormat = "yyyy-MM-dd";

Efektem wywołania funkcji Date() było np. 2019-11-02 mimo że w Windowsie ustawiłem format daty krótkiej na 02.11.2019
Zobaczymy jak to się sprawdzi w moim "dużym" projekcie. Na razie wygląda dobrze :) dzięki za wszystko

1 użytkowników online, w tym zalogowanych: 0, gości: 1