博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

日期格式化

Posted on 2007-06-28 18:02  liufu627  阅读(238)  评论(0)    收藏  举报

        /// <summary>
        /// 将日期转化成指定格式,24制。YYYY: 年;MM:月;DD:日;HH:小时;mm:分钟;SS:秒;MS:毫秒。
        /// </summary>
        /// <param name="format"></param>
        /// <returns></returns>
        public static string ToString(DateTime dt, string format)
        {
            string year = dt.Year.ToString();
            string month = dt.Month.ToString("00");
            string monthSmall = dt.Month.ToString();
            string day = dt.Day.ToString("00");
            string daySmall = dt.Day.ToString();
            string hour = dt.Hour.ToString("00");
            string hourSmall = dt.Hour.ToString();
            string minute = dt.Minute.ToString("00");
            string minuteSmall = dt.Minute.ToString();
            string second = dt.Second.ToString("00");
            string secondSmall = dt.Second.ToString();
            string millisecond = dt.Millisecond.ToString();

            string value = format.Replace("YYYY", year);

            //,StringComparison.CurrentCulture
            if (value.IndexOf("MM") >= 0)
            {
                value = value.Replace("MM", month);
            }
            else
            {
                //防止替换M,使MS无效。
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < value.Length; i++)
                {
                    if (value[i] == 'M')
                    {
                        if (i + 1 < value.Length && value[i + 1] != 'S')
                        {
                            sb.Append(monthSmall);
                        }
                        else
                        {
                            sb.Append(value[i]);
                        }
                    }
                    else
                    {
                        sb.Append(value[i]);
                    }
                }
                value = sb.ToString();
            }

            if (value.IndexOf("DD") >= 0)
            {
                value = value.Replace("DD", day);
            }
            else if (value.IndexOf("D") >= 0)
            {
                value = value.Replace("D", daySmall);
            }

            if (value.IndexOf("HH") >= 0)
            {
                value = value.Replace("HH", hour);
            }
            else if (value.IndexOf("H") >= 0)
            {
                value = value.Replace("H", hourSmall);
            }

            if (value.IndexOf("mm") >= 0)
            {
                value = value.Replace("mm", minute);
            }
            else if (value.IndexOf("m") >= 0)
            {
                value = value.Replace("m", minuteSmall);
            }

            if (value.IndexOf("SS") >= 0)
            {
                value = value.Replace("SS", second);
            }
            else
            {
                //防止替换S,使MS无效。
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < value.Length; i++)
                {
                    if (value[i] == 'S')
                    {
                        if (i - 1 >= 0 && value[i - 1] != 'M')
                        {
                            sb.Append(secondSmall);
                        }
                        else
                        {
                            sb.Append(value[i]);
                        }
                    }
                    else
                    {
                        sb.Append( value[i]);
                    }
                }
                value = sb.ToString();
            }

            if (value.IndexOf("MS") >= 0)
            {
                value = value.Replace("MS", millisecond);
            }

            return value;
        }