发布时间:2019-08-08 00:17:56
Well,IFormatProvider接口是一个格式化提供者,它仅仅提供一个承诺,它告诉编译器实现该了接口的类会提供具体的格式化,而真正的格式化接口是ICustomFormatter接口。所以自定义化格式化日期,我会这样子做:
12345678910111213141516171819202122232425262728293031323334353637 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); } }