日期的格式化显示


我们的日期以前显示为:2010年10月15日 2010年10月16日 2011年10月18日 2011年10月17日 

 

需要修改为: 2010年10月15日 - 17日;

 

规则是:如果连续中间 用-隔开,如果不连续用、隔开。

 

代码如下: 

 

public   static   string  FormatDepartDate( string  AllDepartDate)
        {
            
// 2010年10月15日
            
            
string [] Array_AllDepartDate  =  AllDepartDate.Split( '   ' );            

            IEnumerable
< String >  querys  =  Array_AllDepartDate.OrderBy(a  =>  Convert.ToDateTime(a));

            StringBuilder m_FormatDate 
=   new  StringBuilder( 512 );

            
for  ( int  iLoop  =   0 ; iLoop  <  querys.Count(); iLoop ++ )
            {
                
if  (iLoop  ==   0 )
                {
                    m_FormatDate.Append(querys.ElementAt(
0 ).ToString());
                }
                
else
                {
                    DateTime m_DateTime 
=  Convert.ToDateTime(querys.ElementAt(iLoop  -   1 ));
                    DateTime m_DateTime1 
=  Convert.ToDateTime(querys.ElementAt(iLoop));

                    
// 判断是否同一年
                     if  (m_DateTime1.Year  ==  m_DateTime.Year)
                    {
                        
// 是同一个月
                         if  (m_DateTime1.Month  ==  m_DateTime.Month)
                        {
                            
// 判断日期是否连续
                            IsEqualDay(m_FormatDate,  ref  m_DateTime,  ref  m_DateTime1);
                        }
                        
else
                        {
                            m_FormatDate.AppendFormat(
" 、{0}月{1}日 " , m_DateTime1.Month.ToString( " 00 " ), m_DateTime1.Day.ToString( " 00 " ));
                        }
                    }
                    
else
                    {
                        m_FormatDate.AppendFormat(
" 、{0}年{1}月{2}日 " , m_DateTime1.Year.ToString( " 0000 " ), m_DateTime1.Month.ToString( " 00 " ), m_DateTime1.Day.ToString( " 00 " ));
                    }
                }
            }

            
return  m_FormatDate.ToString();
        }

        
private   static   void  IsEquelDay(StringBuilder m_FormatDate,  ref  DateTime m_DateTime,  ref  DateTime m_DateTime1)
        {
            
if  (m_DateTime1.Day  -  m_DateTime.Day  ==   1 )
            {
                
if  (m_FormatDate.ToString().LastIndexOf( string .Format( " -{0} " , m_DateTime.Day.ToString( " 00 " )))  >   0 // 去掉连续的日期 用-代替。
                    m_FormatDate.Replace( string .Format( " -{0} " , m_DateTime.Day.ToString( " 00 " )),  string .Format( " -{0} " , m_DateTime1.Day.ToString( " 00 " )));
                
else
                    m_FormatDate.AppendFormat(
" -{0}日 " , m_DateTime1.Day.ToString( " 00 " ));
            }
            
else
            {
                m_FormatDate.AppendFormat(
" 、{0}日 " , m_DateTime1.Day.ToString( " 00 " ));
            }
        }

 

 

调用如下:

 

string  a  =   " 2010年10月15日 2010年10月16日 2011年10月15日 2011年10月17日 " ;
                        
Response.Write(FormatDepartDate(a));

 

 

这个方法我不是很满意,也不知道怎么优化了,如果大家有好的方法,请分享出来。 谢谢了!

 缺点: 

1.判断日期连续的地方逻辑复杂。 

2.循环的日期转换,比较耗费性能。

 

 

你可能感兴趣的:(格式化)