Nazwa miesiąca w formacie daty

0

Jak można uzyskać od systemu odmienioną nazwę miesiąca na potrzeby formatowania daty, np 'marca' zamiast LongMonthNames[3] = 'marzec'?

0

Np:

FormatDateTime('mmmm',EncodeDate(2000,MonthNr,1));
0

No nie bardzo...

0

Nie bardzo co? http://ideone.com/fIBHgG

0

To, że funkcja korzysta z LongMonthNames, gdzie miesiące w języku polskim nie są odmienione do użycia w datach.

Może ktoś wie?

0

Chodzi o to, jak na obrazie:
user image

0

Sprawdziłem i taki kod, jak poniżej - pokazuje mi w tytule formatki słowo marzec. Używam Windows 7 Ultimate 64 bit PL. Być może jeśli u Ciebie jest inaczej, to ma to związek z ustawieniami języka lub regionów. Zresztą dla innego dnia - na przykład podając 13 zamiast 1, też mam marzec.

Caption := FormatDateTime('MMMMM', EncodeDate(2013, 3, 1));

Bo jeżeli chodzi Tobie o wypisywania słów w stylu marca, to musiał być sobie do tego zrobić odpowiednią funkcję sprawdzającą miesiąć i zakreś dni, po czym zwracająca odpowiedni string. Chociaż ze screena wynika, że zależy Ci na wyświetleniu miesiąca w postaci marzec.

0

Nie, chodzi o 'marca', tak jak w dacie na górze. Jak wstawisz TDateTimePicker to tam właśnie będzie jak w oknie na screenie. Tylko nie widzę skąd komponent bierze ten string :(

0

TDateTimePicker na pewno nie napisze Tobie "marca". Chyba, że używasz jakiegoś nowszsego Delphi niż 7. Kontrolka na której widnieje napis "marca" jest klasy DirectUIHWND. Także pewnie to jakiś dopieszczony Label. Na lewo poniżej znajduje się faktycznie kontrolka o klasie SysMonthCal32, więc wychodziło by że to dostępna pod WinAPI kontrolka o nazwie "MonthView". Dlatego według mnie jeżeli zakładasz, że Twój program ma się z użytkownikiem komunikować po polsku i potrzebujesz ustalić tekst miesiąca, jako na przykład "marca" zamiast "marzec", to polecam taką prostą funkcję, jak poniżej. Chociaż może ktoś tutaj doradzi Ci coś lepszego.

function PolishMonthText(AMonth : Byte) : string;
const
  Pl_Months_Arr : array[1..12] of string =
    ('stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca', 'lipca',
    'sierpnia', 'września', 'pażdziernika', 'listopada', 'grudnia');
begin
  Result := '';
  if AMonth in [1..12] then
  begin
    Result := Pl_Months_Arr[AMonth];
  end;
end;
0

D2010:
user image

Jako, że Delphi nie jest przeznaczony na polski rynek (brak lokalizacji produktu), stąd całe to pytanie, bo ten string bierze z systemu... Tylko nie wiem skąd :(

BTW: na prawdę ktoś jeszcze używa D7, przecież to anachronizm (podobnie jak mój D2010) :D

1
bcode napisał(a):

BTW: na prawdę ktoś jeszcze używa D7, przecież to anachronizm (podobnie jak mój D2010) :D

Tak, za pewne nie tylko ja. Lazarusa też używam, ale dla aplikacji 64 bitowych. A taką napisałem w sumie tylko jedną - plugin do 64 bitowego AQQ - na swoje potrzeby. W Delphi 7 generowane są stosunkowo małe exeki, nawet przez UPX'owaniem. Dodatkowo są osobne moduły przydatne do pisania w WinAPI, które pozwalają tworzyć jak najmniejszy exek, a to mnie interesuje, bo często zdarza mi się pisać właśnie w WinAPI. Każdy używa co potrzebuje. Lepsze to niż Turbo Pascal czy Dev-Pascal, to jest dopiero przestarzałość.

2

Nie wiem czy jest coś gotowego w Delphi ale można skorzystać z funkcji WinApi GetDateFormat

var
  iSize: Integer;
  sBuff: string;
  st: _SYSTEMTIME;
begin
  DateTimeToSystemTime(Date, st);
  iSize:= GetDateFormat(LOCALE_USER_DEFAULT, 0, @st, 'dd MMMM yyyy', nil, 0);
  SetLength(sBuff, iSize);
  GetDateFormat(LOCALE_USER_DEFAULT, 0, @st, 'dd MMMM yyyy', PAnsiChar(sBuff), iSize);
  Label1.Caption:= sBuff; //26 marca 2013
end;

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