C# 格式化日期时间的时间部分,前导空格为一位数小时

C# 格式化日期时间的时间部分,前导空格为一位数小时,c#,datetime-format,C#,Datetime Format,我正在做一个项目,我需要用一堆东西格式化一个字符串,但相关部分是第一部分-游览时间: 给定 DateTime start = Convert.ToDateTime(myClass.StartDateTime); 如何使用string.Format输出它以显示10:00或3:00 我知道我可以使用如下格式字符串: string text = string.Format("{0:hh:mm tt}",_start); 但这给了我一个前导零(下午3:00),我不想让它出现在一位数的小时内 我是否

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

给定

DateTime start = Convert.ToDateTime(myClass.StartDateTime);
如何使用string.Format输出它以显示10:00或3:00

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

string  text = string.Format("{0:hh:mm tt}",_start);
但这给了我一个前导零(下午3:00),我不想让它出现在一位数的小时内

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

我应该这样做


时间格式字符串中的单个“h”将使其变为零,这样零就不会显示它是否为一位数的小时,而函数将确保它是正确的宽度。

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

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

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

格式化项目语法

每个格式项采用以下形式,包括 下列组成部分:

{index[,alignment][:formatString]}

校准组件

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

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

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

您还可以在格式字符串中使用对齐组件,使
string.format
为您进行填充:
string\u text=string.format(“{0,8:h:mm tt},_start”)@Quartermeister-太好了!我不知道。这应该是一个单独的答案,它比我的好,因为它完全按照OP的要求来处理。我想你可能需要一个
%12
,在这里可能需要更多的逻辑-
\u start.Hour
范围从
0
23
,但是
h
hh
范围从
1
12
twice@Rawling-对不起,我不太明白。你能给出一个时间,上面的内容会违反OP的要求吗?
>9
用来检测是否有两位数,所以我想你可以用
\u start.Hour.ToString().Length>1
来代替。好吧,如果是下午1点,
\u start.Hour
将是
13
,但是
hh
将给出
01
。正如大卫所说,一个更好的答案。非常感谢。
string _text = string.Format("{0,8:h:mm tt}", _start);