格式化DateTime的时间部分,前导空格为一位数小时

时间:2013-07-11 20:32:44

标签: c# datetime-format

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

给出

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

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

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

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

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

我可以添加到格式字符串中以执行此操作,还是必须手动将空格替换为前导零? (我怀疑是这种情况,但想问一下,我可以学习如果有格式方法。)

3 个答案:

答案 0 :(得分:6)

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

应该这样做。

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

答案 1 :(得分:6)

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

string _text = _start.ToString((_start.Hour > 9) ? "hh:mm tt" : " h:mm tt");

答案 2 :(得分:2)

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

  

格式项语法

     

每个格式项都采用以下形式,并包含   以下组件:

     

{index[,alignment][:formatString]}

     

...

     

对齐组件

     

可选的对齐组件是一个有符号整数,表示   首选格式化字段宽度。如果对齐值较小   比格式化字符串的长度,对齐被忽略而且   格式化字符串的长度用作字段宽度。该   如果对齐为正,则字段中的格式化数据是右对齐的   如果对齐为负,则左对齐。如果需要填充,   使用了空白区域。如果指定了对齐,则需要逗号。

您希望将结果右对齐为八个字符的字段,因此您将使用正八的对齐组件与一个h的格式字符串,如@David Stratton的答案,如下所示:

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