Jak wyświetlić amerykański format czasu?

0

Ktoś może pamięta czy w delphi są zadeklarowane gdzieś stałe które można użyć z funkcja FormatDateTime aby uzyskać format daty/czasu zgodny z oczekiwaniami mieszkańca USA ?
Czy to trzeba zapytać system operacyjny ?
Czy to jakaś inna filozofia uzyskania daty w formacie dla danego kraju ?

Przypomniało mi się

formatSettings := TFormatSettings.Create('en-US'); // lub GetLocaleFormatSettings($0409 , formatSettings); // en-US
ShowMessage(TimeToStr(Now, formatSettings ));
ShowMessage(DateTimeToStr(Now, formatSettings ));
ShowMessage(FormatDateTime( formatSettings.LongTimeFormat, now, formatSettings));
1

Pamiętaj, że format możesz samodzielnie podać w formie literału w funkcji FormatDateTime. W ten sposób możesz nie tylko korzystać z formatów dla innych locale, ale też zdefiniować sobie zupełnie własny.

Przy okazji — stałe raczej nie są zadeklarowane, ale jest globalna zmienna FormatSettings, której możesz używać.

0

@furious programming: dziękuje ! zaczęło mi się coś przypominać wiec poprawiłem pierwszy post i podałem przykład.

na początku przypomniała mi się funkcja która użyłem w starym projekcie w D2010

{ GetLocaleFormatSettings loads locale-specific variables (date, time, number,
  currency formats) with values provided by the operating system for the
  specified locale (LCID). The values are stored in the FormatSettings record. }

{$IFDEF MSWINDOWS}
procedure GetLocaleFormatSettings(LCID: Integer;
  var FormatSettings: TFormatSettings);
{$ENDIF}

ale aby jej użyć trzeba znać LCID dla wybranego locale (lista na stronie Microsoft)

A potem w nowszym Delphi 10.4 znalazłem TFormatSettings.Create('en-US')

0
Marius.Maximus napisał(a):

A potem w nowszym Delphi 10.4 znalazłem TFormatSettings.Create('en-US')

I z tego korzystaj, jeśli potrzebujesz paczki formatowania dla konkretnego języka.

Możesz skorzystać z globalnej zmiennej FormatSettings i do niej wpakować lokalne en-US, jeśli w obrębie całego programu zamierzasz z tego formatowania korzystać. Nie będziesz musiał deklarować swojej zmiennej i za każdym razem podawać jej do funkcji konwertujących.

1
Marius.Maximus napisał(a):

Ktoś może pamięta czy w delphi są zadeklarowane gdzieś stałe które można użyć z funkcja FormatDateTime aby uzyskać format daty/czasu zgodny z oczekiwaniami mieszkańca USA ?
Czy to trzeba zapytać system operacyjny ?
Czy to jakaś inna filozofia uzyskania daty w formacie dla danego kraju ?

Filozofia jest generalnie taka, że powinno się wyświetlać zgodnie z ustawieniami systemowymi, a w systemie użytkownik ma ustawione jak chce (czyli zazwyczaj zgodnie z językiem systemu).

1

@Marius.Maximus: a tak w ogóle to czemu ci zależy konkretnie na amerykańskim formacie?

0

@furious programming: działa handlowy znalazł nowy rynek zbytu w USA i trzeba trochę dostosować oprogramowanie do potrzeb nowych klientów którzy trochę inaczej grymaszą :D

3

@Marius.Maximus: wszystko fajnie, tyle że tak jak wspomniał @Azarien, spokojnie możesz korzystać z bieżącej lokalizacji użytkownika. W ten sposób nie tylko będziesz miał mniej roboty, ale i zapewnisz wsparcie formatu dat (i nie tylko) każdemu użytkownikowi, bez względu na to gdzie się znajduje i jakie ma ustawienia (w tym niestandardowe).

0

pominąłem drobny szczegół:
klient dostaje urządzenie razem z oprogramowaniem w którym nie ma dostępu do systemu operacyjnego ani żadnych ustawień Windows, dodatkowo partycja systemowa ma blokadę zapisu na dysku, wszelkie zmiany na C: są zapisywane do ram i po restarcie nie ma po nich śladu

0

Dziwne — co to za software?

W takim przypadku, zrobiłbym combobox ze wszystkimi wspieranymi ciągi znaków (typu en-US i pełną nazwą), tak aby użytkownik mógł sobie sam wybrać która lokalizacja go interesuje. A potem tej wartości bym użył do pobrania formatowania, czyli w konstruktorze TFormatSettings.Create.

Choć zawsze możesz enumerować lokalizacje w runtime, np. używając EnumSystemLocalesEx. ;)

1

Chwila TFormatSettings dostosowane jest do ustawień systemowych i nawet domyślnie reaguje na zmianę tych ustawień w czasie używania aplikacji więc jak one nie odpowiadają użytkownikowi to musisz tylko stworzyć na starcie ustawienia które odpowiadają użytkownikowi i zaraz po tym na false ustawić UpdateFormatSettings

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