Формат TDateTime не изменяется в C ++ Builder - PullRequest
0 голосов
/ 24 февраля 2020

Я совершенно новичок в среде C ++ Builder и довольно плохо знаком с C ++. Извините, если вопрос тривиален. Я пытаюсь изменить формат даты, отображаемый в моем приложении. Дата отображается в метке с именем trait_sb_date_lbl. Я хочу установить дату в следующем формате: месяц (по-английски sh, например, январь), день и год.

Сначала я попытался получить месяц. Я попробовал следующий код:

    TFormatSettings fmt;
    TDate date;

    fmt.DateSeparator = '-';
    fmt.ShortDateFormat = "mmmm/d/yyyy";
    trait_sb_date_lbl->Caption = DateToStr(date.CurrentDate());

Я прочитал в do c, что использование mmmm в качестве месяца для формата должно отображать месяц полностью на английском sh, но это не работает. Даже десятичный разделитель не отображается, ни формат месяц / день / год.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 24 февраля 2020

Вы можете использовать FormatDateTime напрямую, если не хотите использовать текущие настройки локали:

TDate date = Date();
trait_sb_date_lbl->Caption = FormatDateTime("mmmm/d/yyyy", date);

Однако этот формат даты в жестком коде не очень хорош, если используется с такой локалью как sv-SE. Возможно, было бы лучше создать TFormatSettings с выбранной локалью, если ваше приложение поддерживает несколько локалей - и вместо этого использовать предопределенный формат LongDateFormat в этой локали.

TFormatSettings fmt = TFormatSettings::Create("sv-SE"); // one of the supported locales
trait_sb_date_lbl->Caption = FormatDateTime("dddddd", Date(), fmt);

Который с "dddddd" становится

den 25 Februari 2020   // It's actually lacking the day. It should be "Tisdagen den ..."

вместо "mmmm/d/yyyy" версии:

februari-25-2020

Последнее - это то, что вы никогда не будете использовать в sv-SE.

2 голосов
/ 25 февраля 2020

Вы не инициализируете переменную fmt значениями по умолчанию перед изменением ее членов. И вы не передаете его DateToStr() впоследствии:

TFormatSettings fmt = TFormatSettings::Create();
fmt.DateSeparator = '-';
fmt.ShortDateFormat = "mmmm/d/yyyy";
trait_sb_date_lbl->Caption = DateToStr(Date(), fmt);
...