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"