我有一个开始日期和结束日期(以sql server datetime格式)。我想将它分成几个范围,即几对开始和结束日期值。 注意 - 我有.NET 3.5 和Visual Studio 2008。
EG。 S = 2005. E = 2010,块大小= 1年。 巴黎生成= 2005-06,06-07,07-08,08-2010
块可以是任意天数/月。我把代码放在SO帖子中,在我的主要方法之后,我得到了一些错误。发布 - Split date range into date range chunks
代码 -
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
和
当前上下文中不存在名称'Tuple'
答案 0 :(得分:5)
您正在尝试使用仅在.NET 4中引入的System.Tuple<T1, T2>
。您使用的是.NET 3.5,因此该结构不可用。我建议您创建自己的DateRange
类型,其中包含开始和结束DateTime
,然后返回IEnumerable<DateRange>
。
要么,要么升级到.NET 4或4.5 ...
答案 1 :(得分:1)
这是一种.NET 3.5的做事方式。正如其他人所说,Tuple在.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; }
}
}