【问题标题】:Date List To Date Range List? [closed]日期列表到日期范围列表? [关闭]
【发布时间】:2018-11-26 12:46:34
【问题描述】:
Date List        Expected Date Range List
----------       -----------------------
01.11.2018 -->   01.11.2018-01.11.2018
09.11.2018 -
10.11.2018 -->   09.11.2018-10.11.2018
12.11.2018 -
13.11.2018 -
14.11.2018 -->   12.11.2018-14.11.2018
16.11.2018 -->   16.11.2018-16.11.2018
20.11.2018 -
21.11.2018 -->   20.11.2018-21.11.2018
29.11.2018 -->   29.11.2018-29.11.2018

如何使用 C# 从日期列表中获取预期日期范围列表。

【问题讨论】:

  • 你试过什么,什么没用,这个日期列表存储在哪里(在数据库中?),这个日期列表是什么类型(因为它有时似乎包含两个),什么type 是预期的日期范围列表?
  • 你的问题有点含糊,能详细点吗?
  • 我从 DateTimePicker 的选定日期数组中获取日期列表。所以我想获取日期范围列表以保存到数据库。因为减少了数据库的记录数。我希望这个解释对你来说已经足够了。
  • 发布无效的代码。我们非常不清楚您正在寻找什么帮助。这是一个数据库问题吗?阶级结构问题?列表问题?
  • 列出问题...算法问题

标签: c# list date range


【解决方案1】:

也许是这样的:

var format = "dd.MM.yyyy";
var provider = CultureInfo.InvariantCulture;
var list = new List<DateTime> {
    DateTime.ParseExact("01.11.2018", format, provider),
    DateTime.ParseExact("09.11.2018", format, provider),
    DateTime.ParseExact("10.11.2018", format, provider),
    DateTime.ParseExact("12.11.2018", format, provider),
    DateTime.ParseExact("13.11.2018", format, provider),
    DateTime.ParseExact("14.11.2018", format, provider),
    DateTime.ParseExact("16.11.2018", format, provider),
    DateTime.ParseExact("20.11.2018", format, provider),
    DateTime.ParseExact("21.11.2018", format, provider),
    DateTime.ParseExact("29.11.2018", format, provider),            
};
list.Sort();
var n = list.Count;
var rangelist = new List<Tuple<DateTime, DateTime>>(n);
for (var i = 0; i < n; i++)
{
    var min = list[i];
    var max = list[i];
    for (var j = i + 1; j < n; j++)
        if ((list[j] - max).TotalDays == 1)
            max = list[i = j];
        else
            break;
    rangelist.Add(new Tuple<DateTime, DateTime>(min, max));
}
foreach (var range in rangelist)
    Console.WriteLine(
        range.Item1.ToString(format, provider) + "-" +
        range.Item2.ToString(format, provider));

输出:

01.11.2018-01.11.2018

09.11.2018-10.11.2018

12.11.2018-14.11.2018

16.11.2018-16.11.2018

20.11.2018-21.11.2018

29.11.2018-29.11.2018

【讨论】:

  • 非常感谢亚历克斯。
猜你喜欢
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
相关资源
最近更新 更多