1
我很難想出一個乾淨的解決方案,並解決以下問題。 我需要根據每月分辨率在時間間隔(日期從/日期到)之間找到給定日期的索引。查找日期時間間隔索引
例子:
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);
}
任何建議將不勝感激!
編輯:
這裏是一個編譯溶液,其示出了使用@Pikoh溶液停止正常工作時的時間間隔越寬,由於具有不同長度個月,因此這不是一個可行的解決方案。
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;
}
}
}
EDIT2:
我設法找到正確的解決方案閱讀提供的鏈接@Charles馬傑了。所以在某種程度上@Pikoh非常接近。非常感謝你們!
private static int FindIndex3(DateTime timeIntervalFrom, DateTime searchDate)
{
return (int) (searchDate.Subtract(timeIntervalFrom).Days/(365.2425/12));
}
這聽起來很像[差異月兩個日期之間(http://stackoverflow.com/questions/4638993/difference-in-months-between -two-dates)與'searchDate.Subtract(timeIntervalFrom)'。 –
指數是指從日期起的月數?如果是這樣,嘗試'var index =(searchDate - timeIntervalFrom).Days/30;' – Pikoh
我不明白你爲什麼有三個值。你在示例中不使用'searchDate' – LordWilmore