6

我正在做一个项目,我需要用一堆东西格式化一个字符串,但相关的部分是第一部分 - 游览时间:

给定

DateTime start = Convert.ToDateTime(myClass.StartDateTime);

如何使用 string.Format 输出它以显示 10:00 或 < space >3:00?

我知道我可以使用如下格式字符串:

string  text = string.Format("{0:hh:mm tt}",_start);

但这给了我一个前导零(03:00 PM),我不想要个位数的小时。

是否可以在格式字符串中添加一些内容来执行此操作,或者我是否必须手动将空格替换为前导零?(我怀疑是这种情况,但想问一下,这样我就可以了解是否有格式方法。)

4

3 回答 3

6
string  _text = string.Format("{0:h:mm tt}",_start).PadLeft(8, ' ');

应该这样做。

时间格式字符串中的单个“h”将使零不显示,如果它是单个数字小时,l 并且PadLeft函数将确保它是正确的宽度。

于 2013-07-11T20:35:11.087 回答
6

您可以在ToString重载中进行条件检查。

string _text = _start.ToString((_start.Hour > 9) ? "hh:mm tt" : " h:mm tt");
于 2013-07-11T20:40:45.320 回答
3

如果您想使用格式字符串完成所有操作,可以使用对齐组件。请参阅MSDN 上的复合格式

格式化项目语法

每个格式项采用以下形式,由以下组件组成:

{index[,alignment][:formatString]}

...

对齐组件

可选的对齐组件是一个有符号整数,表示首选的格式化字段宽度。如果alignment 的值小于格式化字符串的长度,则忽略对齐,并将格式化字符串的长度用作字段宽度。如果对齐为正,则字段中的格式化数据右对齐,如果对齐为负,则左对齐。如果需要填充,则使用空格。如果指定了对齐方式,则逗号是必需的。

您想在一个八字符字段中右对齐结果,因此您将使用正 8 的对齐组件和带有单个格式字符串的格式字符串,h如@David Stratton 的答案,如下所示:

string _text = string.Format("{0,8:h:mm tt}", _start);
于 2013-07-12T14:35:32.377 回答