C#日期格式化方法中IFormatProvider怎么用

如题所述

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);
        }
    }

温馨提示:答案为网友推荐,仅供参考