在。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小时内使用HH
。hh
给出12小时的时间,但如果不使用tt
表示子午线名称(am/pm),则没有意义。