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

Dev*_*ill 5 c# datetime-format

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

特定

DateTime start = Convert.ToDateTime(myClass.StartDateTime);
Run Code Online (Sandbox Code Playgroud)

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

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

string  text = string.Format("{0:hh:mm tt}",_start);
Run Code Online (Sandbox Code Playgroud)

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

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

Dav*_*vid 6

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

应该这样做.

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

  • 您还可以在格式字符串中使用对齐组件,让 `string.Format` 为您完成填充: `string _text = string.Format("{0,8:h:mm tt}", _start);` (2认同)

key*_*rdP 6

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

string _text = _start.ToString((_start.Hour > 9) ? "hh:mm tt" : " h:mm tt");
Run Code Online (Sandbox Code Playgroud)


Qua*_*ter 3

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

格式化项目语法

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

{index[,alignment][:formatString]}

...

对准组件

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

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

string _text = string.Format("{0,8:h:mm tt}", _start);
Run Code Online (Sandbox Code Playgroud)