如何消除 .Net DateTime 的'd'标准和自定义格式字符串之间的歧义?



在。net应用程序中,我希望以固定长度格式格式化日期和时间,但日期不带前导零,如下所示:

String.Format("{0:d MMM HH:mm:ss}", DateTime.Now);
"25 Jun 04:21:11"

这适用于一个月中大于10的天数,但(如文档所述)不插入前导空格。现在,下面应该提供所需的格式:

String.Format("{0,2:d}", DateTime.Now);
"25/06/2016"

但是,如所见,使用标准的短日期格式字符串来格式化日期。我可以使用:

String.Format("{0,2:''d} {0:MMM HH:mm:ss}", DateTime.Now.AddDays(-20));
" 5 Jun 04:21:11"

得到了想要的效果,但这似乎不是很令人满意。是否有更少的解决方案,让格式化程序使用自定义格式字符串解释孤立的d,而不是短日期标准格式?

当格式只有一个字符时,要区分自定义格式和标准格式,请使用%符号。例如:{0:d}给出标准日期格式,但{0:%d}只给出月份的日期。有关详细信息,请参阅MSDN文档。

你可以这样写:

String.Format("{0,2:%d} {0:MMM HH:mm:ss}", ...
但是,您也可以只指定整个字符串的长度:
String.Format("{0,15:d MMM HH:mm:ss}", ...

当然,这是假设MMM总是三个字符长。这对于英语是正确的(因为。net使用"Sep"而不是"Sept"),但不能保证适用于所有语言和地区。

还要注意,您应该在24小时内使用HHhh给出12小时的时间,但如果不使用tt表示子午线名称(am/pm),则没有意义。

相关内容

  • 没有找到相关文章

最新更新