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

Uniezależnić się od lokalnych ustawień systemowych daty
forritarik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
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

Kopiuj
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 ?

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:5 dni
  • Lokalizacja:Szczecin
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ę.


forritarik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
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ść.

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:17 dni
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
MY
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 20 godzin
  • Postów:1083
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

kq
Przepraszam, forum zjada <sarkazm></sarkazm>
MY
@kq no właśnie coś mi nie pasowało, zatem moja wina ;)
forritarik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
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ć.

edytowany 2x, ostatnio: forritarik
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:17 dni
0

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
forritarik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
0

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

Kopiuj
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

edytowany 1x, ostatnio: forritarik

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.