C# 如何获得从开始到结束的时间间隔并将其放入列表?
例如,我将获得一个时间单位小时,类型为C# 如何获得从开始到结束的时间间隔并将其放入列表?,c#,C#,例如,我将获得一个时间单位小时,类型为DateTimehours,如下所示 先发 我的开始时间是00:00 结束时间是02:00 每次30分钟,我都会将值输入到列表中 那么,我如何才能得到值,并将其放入一个如下所示的列表中 00:00 00:30 01:00 01:30 02:00 我的代码 DateTime starTime = new DateTime(); DateTime endTimes = new DateTime(); DateT
DateTime
hours,如下所示
先发
列表中
那么,我如何才能得到值,并将其放入一个如下所示的列表中
- 00:00
- 00:30
- 01:00
- 01:30
- 02:00
DateTime starTime = new DateTime();
DateTime endTimes = new DateTime();
DateTime interval = new DateTime();
List<DateTime> intervals = new List<DateTime>();
starTime = DateTime.ParseExact(fulldate + "00:00",
"yyyy/MM/dd HH:mm",
CultureInfo.InvariantCulture);
endTimes = DateTime.ParseExact(fulldate + "02:00",
"yyyy/MM/dd HH:mm",
CultureInfo.InvariantCulture); ;
interval = starTime;
for (int i = 0; i < 24; i++)
{
interval.AddHours(0.5);
intervals.Add(interval);
if (interval.ToString("HH:mm") == endTimes.ToString("HH:mm"))
{
break;
}
}
DateTime starTime=newdatetime();
DateTime endTimes=新的DateTime();
日期时间间隔=新的日期时间();
列表间隔=新列表();
starTime=DateTime.ParseExact(fulldate+“00:00”,
“yyyy/MM/dd HH:MM”,
文化信息(不变量文化);
endTimes=DateTime.ParseExact(fulldate+“02:00”,
“yyyy/MM/dd HH:MM”,
文化信息(不变量文化);
间隔=开始时间;
对于(int i=0;i<24;i++)
{
间隔时间(0.5小时);
间隔。添加(间隔);
if(interval.ToString(“HH:mm”)==endTimes.ToString(“HH:mm”))
{
打破
}
}
有人能帮我解决这个问题吗?假设一下(结束时间在同一天,你的结束时间总是可以偏离30分钟,…)这就行了
var start = new TimeSpan(0, 0, 0);
var end = new TimeSpan(2, 0, 0);
var current = start;
List<DateTime> values = new List<DateTime>();
var startDate = DateTime.Now.Date; // editited after @pinkflowydx33's comment
values.Add(startDate + start);
while (current < end)
{
current = current.Add(new TimeSpan(0, 30, 0));
values.Add(startDate + current);
}
foreach (var v in values)
{
Console.WriteLine(v);
}
var start=newtimespan(0,0,0);
var end=新的时间跨度(2,0,0);
无功电流=启动;
列表值=新列表();
var startDate=DateTime.Now.Date;//在@pinkflowydx33的评论后编辑
值。添加(开始日期+开始);
while(当前<结束)
{
当前=当前.Add(新的时间跨度(0,30,0));
添加(起始日期+当前日期);
}
foreach(值中的var v)
{
控制台写入线(v);
}
我准备了那种类型的溶液它是一个循环数,表示-值更改的次数-在这个特定的情况下为30分钟-并添加到起始日期-30分钟,还保存到列表中
using System;
public class Program
{
public static void Main()
{
List<DateTime> intervals = new List<DateTime>();
var changeValue = 30;
var startDate = new DateTime(2010, 05, 12, 13, 00, 00);
var endDate = new DateTime(2010, 05, 12, 14, 00, 00);
var timeIntervals = System.Math.Abs(startDate.Subtract(endDate).TotalMinutes / changeValue);
for (int i = 0; i < timeIntervals; i++)
{
startDate.AddMinutes(30);
intervals.Add(startDate)
}
}
}
使用系统;
公共课程
{
公共静态void Main()
{
列表间隔=新列表();
var changeValue=30;
var startDate=新日期时间(2010,05,12,13,00,00);
var endDate=新的日期时间(2010,05,12,14,00,00);
var时间间隔=System.Math.Abs(开始日期减去(结束日期).TotalMinutes/changeValue);
对于(int i=0;i
在这种情况下,开始和结束日期除以30分钟,不休息-因此,如果有13:00和13:12-它不会将值添加到列表中-因为值不超过30。您能解释一下当前实现如何无法按预期工作吗?如果
开始时间
和结束时间
之间的差不能被30分钟整除,会发生什么呢?似乎我没有得到任何增量+30分钟,只有1分钟times@RickyRezaMuhammad问题是AddHours
不会更新现有值,它返回一个新的,您不需要对它做任何事情(忽略返回值)。您需要使用新的值,即:interval=interval.AddHours(0.5)
最好不要做任何假设,只需在到达终点之前执行即可。代码方面这个例子已经非常接近了。也许你改成了TimeSpan.FromHours
和TimeSpan.FromMinutes
以提高可读性?@gsharp谢谢你,这是工作,也许问题在于逻辑,startDate=DateTime.Today
或startDate=DateTime.Now.Date
或startDate=Now.Date
都做同样的事情,但可能是clearer@pinkfloydx33Shoooot这么多年都在用新的DateTime(a,b,c)。。。总是想着不可能的事。。。一定有更简单的方法;-))谢谢这至少是工作,但中间值仍然留给我起始日期。但是从你的回答中,我终于解决了我的问题好,你是如何解决的?在循环中,我使用gsharp-answer,只添加AddMinutes(30)
,无论如何,谢谢你。这个答案与OP相同。你需要使用AddMinutes
的返回值,它不会更新现有值。为什么?是的,也许不应该?什么是假设?