Bonjour, j'ai une date de début et une date de fin par enregistrement dans une DB. P>
J'ai besoin de vérifier pour voir où la période tombe dans une période de 2 ans divisée en deux lots de trimestres puis affiche les quartiers chaque enregistrement tombe. P>
Le quart 1 comprend le 09 juin, Jul 09, août 09
Le quart 2 comprend le 09 septembre, 09 octobre 09 nov.
Le trimestre 3 comprend le 09 décembre, le 10 janvier, 10 février
Le quart 4 comprend le 10 mars, 10 avril du 10 mai
Quaretr 5 comprend le 10 juin 10 juillet ... P>
E.g. 01/10/09 - 01/06/10 tomberait dans les quartiers 2, 3, 4 et 5 p>
Je suis très nouveau à .NET afin que tous les exemples seraient très appréciés. P>
5 Réponses :
Vous devrez peut-être jeter un coup d'œil à: http://msdn.microsoft.com/en-us/library/03ybds8y (v = vs.100) .aspx
Ceci peut vous démarrer P>
Dictionary<int, int> quarter = new Dictionary<int, int>(); quarter.Add(1,1); //of the format Add(month,quarter) quarter.Add(2,1); ...
private void Form1_Load(object sender, EventArgs e)
{
DateTime[,] ranges = new DateTime[3,2];
//Range 1 - Jan to March
ranges[0, 0] = new DateTime(2010, 1, 1);
ranges[0, 1] = new DateTime(2010, 3, 1);
//Range 2 - April to July
ranges[1, 0] = new DateTime(2010, 4, 1);
ranges[1, 1] = new DateTime(2010, 7, 1);
//Range 3 - March to June
ranges[2, 0] = new DateTime(2010, 3, 1);
ranges[2, 1] = new DateTime(2010, 6, 1);
DateTime checkDate = new DateTime(2010, 4, 1);
string validRanges = string.Empty;
for (int i = 0; i < ranges.GetLength(0); i++)
{
if (DateWithin(ranges[i,0], ranges[i,1], checkDate))
{
validRanges += i.ToString() + " ";
}
}
MessageBox.Show(validRanges);
}
private bool DateWithin(DateTime dateStart, DateTime dateEnd, DateTime checkDate)
{
if (checkDate.CompareTo(dateStart) < 0 || checkDate.CompareTo(dateEnd) > 0)
{
return false;
}
return true;
}
Vous appelez intervalles de suivi comme suit:
private List<DateTime> IntervalInQuarters(DateTime myStartDate, DateTime myEndDate)
{
DateTime quarterStart = new DateTime(2006, 06, 01);
DateTime nextQuarterStart = new DateTime(2006, 09, 01);
DateTime finalDate = new DateTime(2011, 01, 01);
List<DateTime> foundQuarters = new List<DateTime>();
while (quarterStart < finalDate)
{
// quarter intersects interval if:
// its start/end date is within our interval
// our start/end date is within quarter interval
DateTime quarterEnd = nextQuarterStart.AddDays(-1);
if (DateInInterval(myStartDate, quarterStart, quarterEnd) ||
DateInInterval(myEndDate, quarterStart, quarterEnd) ||
DateInInterval(quarterStart, myStartDate, myEndDate) ||
DateInInterval(quarterEnd, myStartDate, myEndDate))
{
foundQuarters.Add(quarterStart);
}
quarterStart = nextQuarterStart;
nextQuarterStart = nextQuarterStart.AddMonths(3);
}
return foundQuarters;
}
private bool DateInInterval(DateTime myDate, DateTime intStart, DateTime intEnd)
{
return ((intStart <= myDate) && (myDate <= intEnd));
}
Si vous souhaitez comparer deux dates, vous devez déterminer le premier jour du trimestre correspond à toutes ces dates, vous pouvez également comparer ces deux dates: produire p> édité fort>: J'ai corrigé une erreur de la première version. Maintenant, cela devrait fonctionner correctement. P> p>
Cela devrait également fonctionner pour vous aussi.
List<Range> ranges = new List<Range>();
ranges.Add(new Range(DateTime.Now, DateTime.Now.AddMonths(3)));
ranges.Add(new Range(DateTime.Now.AddMonths(3), DateTime.Now.AddMonths(6)));
Range test = new Range(DateTime.Now.AddMonths(1), DateTime.Now.AddMonths(2));
var hits = ranges.Where(range => range.Contains(test));
MessageBox.Show(hits.Count().ToString());
Simple, rapide, élégant et super facile à utiliser. +1
Je serais bien si vous marquez une réponse qui vous résolvez de problème comme "réponse acceptée"