用个位数小时的前导空格格式化DateTime的时间部分

本文关键字:空格 格式化 DateTime 时间部 小时 | 更新日期: 2023-09-27 18:22:11

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

给定

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

如何用字符串输出。格式化以显示10:00或<空间>3点?

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

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

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

我可以在格式字符串中添加一些内容来实现这一点吗?或者我必须手动用空格代替前导零吗?(我怀疑是这种情况,但我想问一下,这样我就可以了解如何使用格式化方法了。)

用个位数小时的前导空格格式化DateTime的时间部分

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

应该这样做。

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

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

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

如果您想用一个格式字符串来完成这一切,可以使用对齐组件。请参阅MSDN上的复合格式。

格式化项目语法

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

{index[,alignment][:formatString]}

校准组件

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

你想在一个八个字符的字段中对结果进行右对齐,所以你可以使用一个正8的对齐组件和一个带有单个h的格式字符串,就像@David Stratton的回答一样,如下所示:

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