将日期范围拆分为多个范围
本文关键字:范围 拆分 日期 | 更新日期: 2023-09-27 18:37:18
我有一个开始日期和一个结束日期(以sql服务器日期时间格式)。我想将其分为几个范围,即几对开始和结束日期值。注意 - 我有.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
和:
名称"元组"在当前上下文中不存在
您正在尝试使用 System.Tuple<T1, T2>
,这仅在 .NET 4 中引入。你使用的是 .NET 3.5,因此该结构不可用。我建议你创建自己的DateRange
类型,它封装了一个开始和结束DateTime
,然后返回一个IEnumerable<DateRange>
。
要么,要么升级到 .NET 4 或 4.5...
这是 .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; }
}
}