Well,IFormatProvider接口是一个格式化提供者,它仅仅提供一个承诺,它告诉编译器实现该了接口的类会提供具体的格式化,而真正的格式化接口是ICustomFormatter接口。所以自定义化格式化日期,我会这样子做:
class Program
{
static void Main(string[] args)
{
String format = String.Format(new MyFormatProvider(), "{0:CN}", DateTime.Now);
Console.WriteLine(format);
}
}
class MyFormatProvider : IFormatProvider
{
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
{
return new MyCustomFormatter();
}
return CultureInfo.CurrentCulture.GetFormat(formatType);
}
}
class MyCustomFormatter : ICustomFormatter
{
public string Format(string format, object arg, IFormatProvider formatProvider)
{
if (arg is DateTime)
{
DateTime dt=(DateTime)arg;
// CN-中国,UK-英国,US-美国。这里仅仅是一个示例。具体用法根据实际情况而定
if (format == "CN") return String.Format("{0}年{1}月{2}日", dt.Year,dt.Month.ToString("##"),dt.Day);
if (format == "UK") return String.Format("{0}/{1}/{2}", dt.Day ,dt.Month.ToString("##"),dt.Year);
}
return String.Format("Non-Formatter{0}", format);
}
}