首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >速记日期

速记日期
EN

Stack Overflow用户
提问于 2010-12-11 05:14:45
回答 1查看 787关注 0票数 5

假设您有一个日期字符串,如下所示:

代码语言:javascript
复制
11/15/2010, 12/1/10, 12/2/10, 12/3/10, 12/4/10, 12/9/10

你如何像下面这样缩短这个字符串(或者类似的东西)

代码语言:javascript
复制
11/15/2010, 12/1-4, 9/10

因为想象一下连续30天,看到12/1-31/10要比列出所有日期要好。

只是为了让它更紧凑一点?

谢谢,罗德。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-11 05:52:40

代码语言:javascript
复制
public class so_4413380
{
    private class DateGroup
    {
        public IList<DateTime> Dates { get; set; }

        public DateTime First
        {
            get { return Dates.OrderBy(d => d).FirstOrDefault(); }
        }

        public DateTime Last
        {
            get { return Dates.OrderBy(d => d).LastOrDefault(); }
        }

        public DateGroup()
        {
            Dates = new List<DateTime>();
        }
    }

    public void Execute()
    {
        var dateTimeFormat = CultureInfo.GetCultureInfo("en-US").DateTimeFormat;
        var dates = new[] { "11/15/2010", "12/1/10", "12/2/10", "12/3/10", "12/4/10", "12/9/10" };
        var realDates = dates.Select(s => DateTime.Parse(s, dateTimeFormat));
        var dateGroups = new List<DateGroup>();

        DateTime lastDate = DateTime.MinValue;
        foreach (var date in realDates.OrderBy(d => d))
        {
            if (date.Month == lastDate.Month && (date - lastDate).Days <= 1)
            {
                var dateGroup = dateGroups.LastOrDefault();
                dateGroup.Dates.Add(date);
            }
            else
            {
                var dateGroup = new DateGroup();
                dateGroups.Add(dateGroup);

                dateGroup.Dates.Add(date);
            }

            lastDate = date;
        }

        foreach (var dateGroup in dateGroups)
        {
            if (dateGroup.Dates.Count == 1)
            {
                Console.WriteLine(dateGroup.First.ToString(dateTimeFormat.ShortDatePattern, dateTimeFormat));
            }
            else
            {
                int firstDay = dateGroup.First.Day;
                int lastDay = dateGroup.Last.Day;

                var dateString = dateTimeFormat.ShortDatePattern.Replace("d", firstDay + "-" + lastDay);

                Console.WriteLine(dateGroup.First.ToString(dateString, dateTimeFormat));
            }
        }

        Console.ReadLine();
    }
}

产生

代码语言:javascript
复制
11/15/2010
12/1-4/2010
12/9/2010
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4413380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档