C# 将日期范围拆分为几个范围?

C# 将日期范围拆分为几个范围?,c#,.net,datetime,date-range,C#,.net,Datetime,Date Range,我有一个开始日期和一个结束日期(sql server datetime格式)。我想把它分成几个范围,即开始和结束日期值的几对注意-我有.NET3.5和VisualStudio2008 S=2005。E=2010,区块大小=1年。 巴黎生成=2005-06、06-07、07-08、08-2010 区块可以是任意天数/月数。我把代码放在一个SO帖子中,在我的main方法之后,我得到了一些错误。后- 代码- public static IEnumerable<Tuple<DateTime,

我有一个开始日期和一个结束日期(sql server datetime格式)。我想把它分成几个范围,即开始和结束日期值的几对注意-我有.NET3.5和VisualStudio2008

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

区块可以是任意天数/月数。我把代码放在一个SO帖子中,在我的main方法之后,我得到了一些错误。后-

代码-

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);
}
公共静态IEnumerable SplitDateRange(DateTime开始、DateTime结束、int dayChunkSize)
{
日期时间块结束;
而((chunkEnd=start.AddDays(dayChunkSize))
我有两个错误:

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

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

您正在尝试使用,这只是在.NET4中介绍的。您正在使用.NET3.5,因此该结构不可用。我建议您创建自己的
DateRange
类型,它封装了开始和结束
DateTime
,然后返回一个
IEnumerable

要么这样,要么升级到.NET 4或4.5…

您正在尝试使用的,它只在.NET 4中引入。您正在使用.NET3.5,因此该结构不可用。我建议您创建自己的
DateRange
类型,它封装了开始和结束
DateTime
,然后返回一个
IEnumerable


或者升级到.NET 4或4.5…

这里有一个.NET 3.5的操作方法。正如其他人所说,Tuple在.NET3.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; }
    }
}
使用系统;
使用System.Collections.Generic;
命名空间控制台应用程序1
{
内部课程计划
{
私有静态void Main(字符串[]args)
{
var myDateTime=新日期时间(2013,10,29);
var myEndDateTime=新日期时间(2014,10,29);
var result=SplitDateRange(myDateTime,myEndDateTime,10);
var file=new System.IO.StreamWriter(“c:\\dateFile.txt”);
foreach(结果中的var项目)
{
WriteLine(“StartDate:{0},EndDate:{1}”,item.StartDateTime,item.EndDateTime);
}
file.Close();
}
公共静态IEnumerable SplitDateRange(DateTime开始、DateTime结束、int dayChunkSize)
{
日期时间块结束;
而((chunkEnd=start.AddDays(dayChunkSize))
以下是一种.NET 3.5的工作方式。正如其他人所说,Tuple在.NET3.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; }
    }
}
使用系统;
使用System.Collections.Generic;
命名空间控制台应用程序1
{
内部课程计划
{
私有静态void Main(字符串[]args)
{
var myDateTime=新日期时间(2013,10,29);
var myEndDateTime=新日期时间(2014,10,29);
var result=SplitDateRange(myDateTime,myEndDateTime,10);
var file=new System.IO.StreamWriter(“c:\\dateFile.txt”);
foreach(结果中的var项目)
{
WriteLine(“StartDate:{0},EndDate:{1}”,item.StartDateTime,item.EndDateTime);
}
file.Close();
}
公共静态IEnumerable SplitDateRange(DateTime开始、DateTime结束、int dayChunkSize)
{
日期时间块结束;
而((chunkEnd=start.AddDays(dayChunkSize))
问题是找不到
元组
——您导入了
系统
名称空间了吗?您使用的是.NET的v4.0还是更高版本?我使用的是System.Tuple,但我得到了错误。不确定我得到了哪个版本的.NET。但是,我猜它是3.XXNo,你应该有
使用系统
-使用
指令的
命名名称空间,而不是类型(除非您正在创建别名)。但您确实需要找出您正在使用的.NET版本。您正在使用哪个版本的Visual Studio?您是否查看了项目属性以了解项目的目标?@JonSkeet-我使用visual studio 2008。好的,网络是3.5版。我已经有了使用系统;正当这就是问题所在<代码>元组
直到.NET 4才引入。问题是找不到
元组
——您导入了
系统
名称空间吗?您使用的是.NET的v4.0还是更高版本?我使用的是System.Tuple,但我得到了错误。不确定我得到了哪个版本的.NET。但是,我猜它是3.XXNo,你应该有
使用系统
-使用指令的
命名名称空间,而不是类型(除非您正在创建别名)。但您确实需要找出您正在使用的.NET版本。哪个版本