Как я могу поставить порядковый суффикс в конце даты? - PullRequest
0 голосов
/ 13 октября 2011

Я использую Delphi BDS2006, как я могу отформатировать дату (01/10/2011), чтобы выглядеть примерно 1st Oct 2011

Я пытался использовать ShowMessage(FormatDateTime('ddd mmm yyyy', now));

полученное сообщение: Sat Oct 2011

ddd дает мне Sat, а не 1st

Подобным образом я хочу добавить st,nd,rd,th к Дате

Существует ли встроенная процедура или функция для этого, или я должен вручную проверить дату и присвоить ей суффикс

Я сейчас использую это

case dayof(now)mod 10 of
 1 : days:=inttostr(dayof(dob))+'st';
 2 : days:=inttostr(dayof(dob))+'nd';
 3 : days:=inttostr(dayof(dob))+'rd';
 else days:=inttostr(dayof(dob))+'th';

 end;

Ответы [ 2 ]

4 голосов
/ 13 октября 2011

Вот независимая от локали английская версия того же самого. GetShortMonth существует потому, что ShortMonthNames принимает сокращения месяца из настроек локали.

function GetOrdinalSuffix(const Value: Integer): string;
begin
  case Value of
    1, 21, 31: Result := 'st';
    2, 22: Result := 'nd';
    3, 23: Result := 'rd';
  else
    Result := 'th';
  end;
end;

function GetShortMonth(const Value: Integer): string;
begin
  case Value of
    1: Result := 'Jan';
    2: Result := 'Feb';
    3: Result := 'Mar';
    4: Result := 'Apr';
    5: Result := 'May';
    6: Result := 'Jun';
    7: Result := 'Jul';
    8: Result := 'Aug';
    9: Result := 'Sep';
    10: Result := 'Oct';
    11: Result := 'Nov';
    12: Result := 'Dec';
  end;
end;

procedure TForm1.DateTimePicker1Change(Sender: TObject);
var
  Day: Word;
  Month: Word;
  Year: Word;
begin
  DecodeDate(DateTimePicker1.Date, Year, Month, Day);
  ShowMessage(Format('%d%s %s %d', [Day, GetOrdinalSuffix(Day), GetShortMonth(Month), Year]));
end;
4 голосов
/ 13 октября 2011

Нет ничего встроенного в Delphi, чтобы сделать такую ​​форму дня. Вам придется сделать это самостоятельно. Как это:

function DayStr(const Day: Word): string;
begin
  case Day of
  1,21,31:
    Result := 'st';  
  2,22:
    Result := 'nd';  
  3,23:
    Result := 'rd';  
  else
    Result := 'th';  
  end;
  Result := IntToStr(Day)+Result;
end;
...