我正在开发一个项目,我需要用一堆东西来格式化一个字符串,但相关的部分是第一部分 - 巡演的时间:
给出
DateTime start = Convert.ToDateTime(myClass.StartDateTime);
如何使用string.Format输出它以显示10:00或<空间> 3:00?
我知道我可以使用格式字符串,如:
string text = string.Format("{0:hh:mm tt}",_start);
但这给了我一个领先的零(03:00 PM),我不想要一位数小时。
我可以添加到格式字符串中以执行此操作,还是必须手动将空格替换为前导零? (我怀疑是这种情况,但想问一下,我可以学习如果有格式方法。)
答案 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);