Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获得从开始到结束的时间间隔并将其放入列表?_C# - Fatal编程技术网

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
  • 结束时间是02:00
  • 每次30分钟,我都会将值输入到
    列表中
    那么,我如何才能得到值,并将其放入一个如下所示的列表中

    • 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.FromHoursTimeSpan.FromMinutes以提高可读性?@gsharp谢谢你,这是工作,也许问题在于逻辑,
    startDate=DateTime.Today
    startDate=DateTime.Now.Date
    startDate=Now.Date
    都做同样的事情,但可能是clearer@pinkfloydx33Shoooot这么多年都在用新的DateTime(a,b,c)。。。总是想着不可能的事。。。一定有更简单的方法;-))谢谢这至少是工作,但中间值仍然留给我起始日期。但是从你的回答中,我终于解决了我的问题好,你是如何解决的?在循环中,我使用gsharp-answer,只添加
    AddMinutes(30)
    ,无论如何,谢谢你。这个答案与OP相同。你需要使用
    AddMinutes
    的返回值,它不会更新现有值。为什么?是的,也许不应该?什么是假设?