Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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#_Date_Datetime - Fatal编程技术网

C# 查找时间间隔中的日期索引

C# 查找时间间隔中的日期索引,c#,date,datetime,C#,Date,Datetime,对于以下问题,我很难想出一个干净的解决方案。 我需要根据每月的分辨率,在时间间隔(date from/date to)之间找到给定日期的索引 using System; namespace ConsoleApplication { class Program { static void Main(string[] args) { int endYear = 2022; var index1 = F

对于以下问题,我很难想出一个干净的解决方案。 我需要根据每月的分辨率,在时间间隔(date from/date to)之间找到给定日期的索引

using System;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            int endYear = 2022;

            var index1 = FindIndex1(new DateTime(2016, 1, 1), new DateTime(endYear, 3, 1), new DateTime(endYear, 2, 1));
            var index2 = FindIndex2(new DateTime(2016, 1, 1), new DateTime(endYear, 3, 1), new DateTime(endYear, 2, 1));

            Console.Out.WriteLine($"FindIndex1: {index1}, FindIndex2: {index2}, Result: {(index1 == index2 ? "OK" : "FAIL")}");
        }

        private static int FindIndex1(DateTime timeIntervalFrom, DateTime timeIntervalTo, DateTime searchDate)
        {
            var index = 0;
            while (timeIntervalFrom < timeIntervalTo)
            {
                if (timeIntervalFrom == searchDate)
                    break;

                index++;
                timeIntervalFrom = timeIntervalFrom.AddMonths(1);
            }

            return index;
        }

        private static int FindIndex2(DateTime timeIntervalFrom, DateTime timeIntervalTo, DateTime searchDate)
        {
            return (searchDate - timeIntervalFrom).Days / 30;
        }
    }
}
例如:

date format = yyyy-MM-dd
timeIntervalFrom = 2016-02-01
timeIntervalTo = 2017-03-01
searchDate = 2017-01-01
这里的指数是11

我唯一想到的是暴力搜索,但我觉得有一种更干净的方法可以通过数学来解决这个问题

var index = 0;
while (timeIntervalFrom < timeIntervalTo)
{
    if (timeIntervalFrom == searchDate)
        break;

    index++;
    timeIntervalFrom = timeIntervalFrom.AddMonths(1);
}
请尝试以下代码:

 private static int FindIndex(DateTime timeIntervalFrom, DateTime timeIntervalTo, DateTime searchDate)
    {

        var index = -1;
        if (searchDate.CompareTo(timeIntervalFrom) >= 0 && searchDate.CompareTo(timeIntervalTo) <= 0)
        {
            index = (searchDate.Year - timeIntervalFrom.Year) * 12
                + (searchDate.Month > timeIntervalFrom.Month ? searchDate.Month - timeIntervalFrom.Month
                : searchDate.Month + 12 - timeIntervalFrom.Month);
        }

        return index;
    }
private static int FindIndex(DateTime timeIntervalFrom、DateTime timeIntervalTo、DateTime searchDate)
{
var指数=-1;
如果(searchDate.CompareTo(timeIntervalFrom)>=0&&searchDate.CompareTo(timeIntervalTo)timeIntervalFrom.Month?searchDate.Month-timeIntervalFrom.Month
:searchDate.Month+12-timeIntervalFrom.Month);
}
收益指数;
}
尝试以下代码:

 private static int FindIndex(DateTime timeIntervalFrom, DateTime timeIntervalTo, DateTime searchDate)
    {

        var index = -1;
        if (searchDate.CompareTo(timeIntervalFrom) >= 0 && searchDate.CompareTo(timeIntervalTo) <= 0)
        {
            index = (searchDate.Year - timeIntervalFrom.Year) * 12
                + (searchDate.Month > timeIntervalFrom.Month ? searchDate.Month - timeIntervalFrom.Month
                : searchDate.Month + 12 - timeIntervalFrom.Month);
        }

        return index;
    }
private static int FindIndex(DateTime timeIntervalFrom、DateTime timeIntervalTo、DateTime searchDate)
{
var指数=-1;
如果(searchDate.CompareTo(timeIntervalFrom)>=0&&searchDate.CompareTo(timeIntervalTo)timeIntervalFrom.Month?searchDate.Month-timeIntervalFrom.Month
:searchDate.Month+12-timeIntervalFrom.Month);
}
收益指数;
}

听起来很像搜索日期。减去(timeIntervalFrom)。索引表示从日期算起的月数?如果是这样,请尝试
var index=(searchDate-timeIntervalFrom).Days/30searchDate
,为什么您说我的解决方案不起作用?如果我的计算是正确的,从2016年1月到2022年3月有75个月……你认为正确的结果应该是什么?听起来很像
searchDate。减去(timeIntervalFrom)
。Index表示从日期算起的月数?如果是这样,请尝试
var index=(searchDate-timeIntervalFrom).Days/30searchDate
,为什么您说我的解决方案不起作用?如果我的计算是正确的,从2016年1月到2022年3月有75个月……你认为正确的结果应该是什么?