c#中的自定义日期时间格式

时间:2012-11-30 12:13:13

标签: c# string datetime string-formatting datetime-format

我有一个变量,使用以下字符串格式打印出来:

var printThis = String.Format("{0:d}, {0:T}", dateAndTimeVar);

现在我遇到了问题;当我没有设置'dateAndTimeVar'时,我需要'{0:T}'来显示类似'--. - .--'的内容。使用常规DateTime类型似乎不支持这种情况(如果没有设置时间,则默认显示'00 .00.00')。

我可以将'dateAndTimeVar'变量更改为任何内容(包括其他类型),但字符串格式必须保持不变。

有没有解决方案?

4 个答案:

答案 0 :(得分:5)

您需要创建自己的IFormatProvider并将其传递给String.Format方法,如下所示

String.Format(new MyFormatProvider(), "{0:d}, {0:T}", dateAndTimeVar);

然后,FormatProvider将对除T之外的所有格式进行传递,您可以使用逻辑输出DateTime的本机T格式或--. - .--如果DateTime的时间部分是00:00:00。

在MSDN上了解IFormatProvider here

答案 1 :(得分:1)

这是您可以使用的日期时间模式列表

DateTime.ToString() Patterns | GeekZilla

干杯

答案 2 :(得分:0)

你可以这样做:

var printThis = String.Format("{0:d}, {0:T}", dateAndTimeVar)
                      .Replace("00:00:00", "--.--.--");

答案 3 :(得分:0)

您只需检查DateTime是否包含时间:

String printThis = dateAndTimeVar.Date == dateAndTimeVar ?  
    String.Format("{0:d}, --.--.--", dateAndTimeVar) : 
    String.Format("{0:d}, {0:T}", dateAndTimeVar);