C++/CLI CLR WinForm中修改Stopwatch秒表显示格式为HH:mm:ss
C++/CLI中Stopwatch输出HH:mm:ss格式的实现方案
Stopwatch类的Elapsed属性返回TimeSpan类型值,默认无参ToString()输出会携带冗余的毫秒、小数秒数位,要固定输出两位小时、两位分钟、两位秒的格式,直接给ToString()方法传入自定义格式串即可。
修改后的事件代码
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) { this->label3->Text = stopWatch.Elapsed.ToString(@"hh\:mm\:ss"); }
关键说明
- TimeSpan类型的自定义格式规则和DateTime有区别:TimeSpan中用
hh表示00-23范围的两位24小时制小时,和DateTime格式串中HH的显示效果一致;mm表示两位分钟,ss表示两位秒,不足两位时自动补前导零。 - 格式串中的冒号前加反斜杠是为了转义:TimeSpan格式规则中未转义的冒号是区域敏感的时间分隔符占位符,在部分系统区域下会被替换为
.等其他符号,转义后会固定显示冒号。 - 字符串前的
@是C++/CLI逐字字符串标识符,如果不使用逐字字符串,格式串需要写成"hh\\:mm\\:ss",效果完全相同。 - 如果秒表累计时长可能超过24小时,需要不被24截断显示总小时,可以把格式串替换为
@"%h\:mm\:ss";如果需要同时显示天数,可以用@"d\.hh\:mm\:ss"格式。 - 如果需要强制忽略系统区域设置,保证输出格式完全不受环境影响,可以传入不变文化参数,代码如下:
using namespace System::Globalization; private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) { this->label3->Text = stopWatch.Elapsed.ToString(@"hh\:mm\:ss", CultureInfo::InvariantCulture); }
内容的提问来源于stack exchange,提问作者Yissou
相关产品推荐
相关产品推荐

