TDateTime格式在C ++ Builder中不变

问题描述 投票:0回答:2

我对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作为格式的月份应该以英文显示月份,但这不起作用。即使不显示小数点分隔符,也不显示月/日/年的格式。

任何想法?

c++ c++builder
2个回答
3
投票

如果您不想使用当前的语言环境设置,则可以直接使用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
投票

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

TFormatSettings fmt = TFormatSettings::Create();
fmt.DateSeparator = '-';
fmt.ShortDateFormat = "mmmm/d/yyyy";
trait_sb_date_lbl->Caption = DateToStr(Date(), fmt);
© www.soinside.com 2019 - 2024. All rights reserved.