1

我有一个开始日期和一个结束日期(以 sql server 日期时间格式)。我想把它分成几个范围,即几对开始和结束日期值。注意 - 我有 .NET 3.5和 Visual Studio 2008。

例如。S = 2005。E = 2010,块大小 = 1 年。巴黎生成 = 2005-06, 06-07, 07-08, 08-2010

块可以是任意天数/月数。在我的主要方法之后,我将代码放在 SO 帖子中,但出现了一些错误。发布 -将日期范围拆分为日期范围块

代码 -

public static IEnumerable<Tuple<DateTime, DateTime>> SplitDateRange(DateTime start, DateTime end, int dayChunkSize)
{
    DateTime chunkEnd;
    while ((chunkEnd = start.AddDays(dayChunkSize)) < end)
    {
        yield return Tuple.Create(start, chunkEnd);
        start = chunkEnd;
    }
    yield return Tuple.Create(start, end);
}

我收到两个错误:

'CodeHere.csproj.ScriptMain.SplitDateRange(System.DateTime, System.DateTime, int)' 的主体不能是迭代器块,因为 'IEnumerable

和:

当前上下文中不存在名称“元组”

4

2 回答 2

5

您正在尝试使用System.Tuple<T1, T2>仅在 .NET 4 中引入的 .NET 3.5。您使用的是 .NET 3.5,因此该结构不可用。我建议您创建自己的DateRange类型来封装 start 和 end DateTime,然后返回 an IEnumerable<DateRange>

要么,要么升级到 .NET 4 或 4.5...

于 2013-10-29T21:28:08.790 回答
1

这是 .NET 3.5 的处理方式。正如其他人所说,.NET 3.5 中不存在元组。

using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var myDateTime = new DateTime(2013, 10, 29);
            var myEndDateTime = new DateTime(2014, 10, 29);
            var result = SplitDateRange(myDateTime, myEndDateTime, 10);

            var file = new System.IO.StreamWriter("c:\\dateFile.txt");
            foreach (var item in result)
            {
                file.WriteLine("StartDate: {0}, EndDate: {1}", item.StartDateTime, item.EndDateTime);
            }

            file.Close();

        }
        public static IEnumerable<SplitDateTime> SplitDateRange(DateTime start, DateTime end, int dayChunkSize)
        {
            DateTime chunkEnd;
            while ((chunkEnd = start.AddDays(dayChunkSize)) < end)
            {
                yield return new SplitDateTime(start, chunkEnd);
                start = chunkEnd;
            }
            yield return new SplitDateTime(start, end);
        }
    }
    public class SplitDateTime
    {
        public SplitDateTime(DateTime startDateTime, DateTime endDateTime)
        {
            StartDateTime = startDateTime;
            EndDateTime = endDateTime;
        }
        public DateTime StartDateTime { get; set; }
        public DateTime EndDateTime { get; set; }
    }
}
于 2013-10-29T21:32:39.800 回答