日期的格式化显示
时间:2010-10-15 来源:管宇
我们的日期以前显示为: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.循环的日期转换,比较耗费性能。
相关阅读 更多 +