TDateTime 格式在 C++ Builder 中没有改变

TDateTime format does not change in C++ Builder

我对 C++ Builder 环境完全陌生,对 C++ 也很陌生。很抱歉,如果这个问题是微不足道的。 我正在尝试更改我的应用程序中显示的日期格式。日期显示在名为 trait_sb_date_lbl 的标签中。我想将日期设置为以下格式:月(英文,如一月)日和年。

首先,我尝试获取月份。我尝试了以下代码:

    TFormatSettings fmt;
    TDate date;

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

我在文档中读到,使用 mmmm 作为格式的月份应该以全英文显示月份,但这不起作用。连小数点都不显示,month/day/year.

格式也不显示

有什么想法吗?

如果不想使用当前区域设置,可以直接使用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 中永远不会使用的东西。

在更改其成员之前,您没有使用默认值初始化 fmt 变量。而且你之后没有将它传递给 DateToStr()

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