[C#] Dichtstbijzijnde datum

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 13-06 23:19
Hallo.
Ik probeer in C# een rapportparser te maken die waarden uit een rapport vergelijkt.
Omdat deze rapporten niet periodiek zijn probeer ik wat code te schrijven die de "dichtsbijzijnde datum" vindt.
Ik kan alleen maar hierop komen, maar deze geeft eigenlijk "meest recente datum buiten interval". Iemand een beter idee (dat echt de "dichstbijzijnde" datum geeft)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
DateTime[] dates;
DateTime mostRecentDate;
DateTime desiredDate = mostRecentDate.AddMonths(-1);
DateTime closestDate = new DateTime(1990,0,0);

int c = dates.Length;
for(int i=0;i<c;i++)
{
    if(dates[i].Ticks > closestDate.Ticks && dates[i].Ticks <= desiredDate.Ticks)
    {
        closestDate = dates[i];
    }
}


Dankjewel alvast

P.S. Kan je eigenlijk ook gewoon DateTime > DateTime doen? Ik wist niet meer zeker of je .Ticks moest gebruiken.

Acties:
  • 0 Henk 'm!

  • asfaloth_arwen
  • Registratie: Februari 2005
  • Laatst online: 17:57
Je kunt eens kijken naar een datediff() functie :) V.z.i.w. zit deze niet standaard in C#, maar met Google zijn wel genoeg alternatieven te vinden.

[ Voor 51% gewijzigd door asfaloth_arwen op 26-08-2008 10:10 ]

Specs


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je hebt geen datediff functie maar je kunt wel gewoon dates van elkaar aftrekken. Iets als het volgende zou ook gewoon moeten werken. ( Niet getest )
C#:
1
2
3
4
5
6
7
8
9
10
11
12
DateTime[] dates;
DateTime now = DateTime.Now;
TimeSpan diff= dates[0] - now;
DateTime nearestDate = dates[0];
for(int i = 1; i < dates.Length; i++)
{
    if( (dates[i] - now) < diff )
    {
         diff = dates[i] - now;
         nearestDate = dates[i];
    }
}
dtech schreef op dinsdag 26 augustus 2008 @ 10:05:
P.S. Kan je eigenlijk ook gewoon DateTime > DateTime doen? Ik wist niet meer zeker of je .Ticks moest gebruiken.
Dan had je dat even op kunnen zoeken in de msdn http://msdn.microsoft.com...etime.op_greaterthan.aspx

[ Voor 28% gewijzigd door Woy op 26-08-2008 10:16 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:56
#define dichtsbijzijnde datum ? Dichtstbijzijnd bij wat ?

Tuurlijk kan je ook DateTime < DateTime doen. Check de MSDN anders eens, en je zal zien dat die operators ook ge-overloaded zijn. Je kan het natuurlijk ook altijd zelf eens uittesten, dat duurt 2 seconden en je weet het.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • asfaloth_arwen
  • Registratie: Februari 2005
  • Laatst online: 17:57
@rwb: er zijn altijd een paar speciale dingen waar je rekening mee moet houden mbt datums en tijden. Zodra er andere tijdzones oid bijkomen moet je hier even kijken: http://msdn.microsoft.com/en-us/library/ms973825.aspx

Specs


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
asfaloth_arwen schreef op dinsdag 26 augustus 2008 @ 10:17:
@rwb: er zijn altijd een paar speciale dingen waar je rekening mee moet houden mbt datums en tijden. Zodra er andere tijdzones oid bijkomen moet je hier even kijken: http://msdn.microsoft.com/en-us/library/ms973825.aspx
Ik weet idd dat je daar op moet letten, maar het is nogal overbodig om een datediff functie te gaan zoeken als de DateTime struct gewoon alle functionaliteiten bied die je nodig hebt.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 13-06 23:19
whoami schreef op dinsdag 26 augustus 2008 @ 10:14:
#define dichtsbijzijnde datum ? Dichtstbijzijnd bij wat ?
Zoals (dacht ik) uit de code blijkt, dichtstbijzijnd bij desiredDate :)
rwb schreef op dinsdag 26 augustus 2008 @ 10:14:
Je hebt geen datediff functie maar je kunt wel gewoon dates van elkaar aftrekken. Iets als het volgende zou ook gewoon moeten werken. ( Niet getest )
Aangezien je now aftrekt van de datum, zal < dan niet het grootste tijdverschil opleveren? (aangezien het verschil negatief is).
Ik heb wel daardoor iets bedacht, deze moet denk ik werken, maar ik moet hem nog testen.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DateTime[] dates;
DateTime mostRecentDate;
DateTime desiredDate = mostRecentDate.AddMonths(-1);
DateTime closestDate = new DateTime(1990,0,0);
TimeSpan diff = Math.Abs(desiredDate - closestDate);

int c = dates.Length;
for(int i=0;i<c;i++)
{
    if(Math.Abs(closestDate-dates[i]) < diff)
    {
        closestDate = dates[i];
        diff = Math.Abs(desiredDate-closestDate);
    }
}

Acties:
  • 0 Henk 'm!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 13-06 23:19
Deze code werkt uiteindelijk volgens mij (nog te weinig data om definitef te zeggen)
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DateTime[] dates;
DateTime mostRecentDate;
DateTime desiredDate = mostRecentDate.AddMonths(-1);
DateTime closestDate = new DateTime(1990,0,0); 
 long diff = Math.Abs((desiredDate-closestDate).Ticks);
    
for (int i = 0; i < c; i++)
{
    if ((Math.Abs((desiredDate - dates[i]).Ticks)) < diff)
    {
        closestDate = dates[i];
        diff = Math.Abs((desiredDate - closestDate).Ticks);
    }
}
Pagina: 1