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或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);