Sprawdzanie dwóch dat.

0

Witam

Panowie i Panie mam coś takiego do sprawdzenia.
Metoda powinna zwracać false gdy miesiąc w Date jest późniejszy(następny) o 1 miesiąc od Id:
Id = 1.12.2016
Date = 1.01.2017.

Jeśli data Date jest wcześniejsza o jeden miesiąc tzn gdy wartość ma np 1.11.2016 lub 29.11.2016 lub 28.11.2015 to wtedy true.
Drugi case:
Jeśli data Date jest późniejsza od Id o 2 miesiące lub więcej wtedy true np: 1.02.2017 lub 1.03.2018 itp itd..

Co o tym sądzicie ?

 private bool CheckWrongDate(DateTime Id, DateTime Date)
        {
            bool isWrong = true;

            if (Id.Ticks <= Date.Ticks)
            {
                var difference = Math.Abs((Id - Date).TotalDays);
                var differenceDate = Id.AddDays(difference);
                var correctMonth = Id.AddMonths(1);

                if (differenceDate.Month == correctMonth.Month && differenceDate.Year == correctMonth.Year)
                {
                    isWrong = false;
                }
            }

            return isWrong;
        } 

W razie pytań niejasności proszę dać znać:) Przepraszam za brzydkie nazewnictwo zmiennych. Jeśli macie lepsze sugestie to chętnie przeczytam :)

Pozdrawiam
Łukasz

0

Sprawdź debugerem co robisz. Ewidentnie rachunki, które wykonujesz powodują, że choćby w przypadku:

Id = 1.12.2016
Date = 1.01.2017

masz dwie identyczne daty, a skoro tak jest to warunek się zgadza i if się wykona.

816dc52349.png

1

Jeżeli dobrze rozumiem, to metoda ma zwracać true tylko wtedy, kiedy druga data jest dokładnie o miesiąc większa. To nie lepiej tak: (oczywiście trzeba uwzględnić tutaj również godziny minuty w obiektach klasy DateTime).

 
public boolean CheckWrongDate(DateTime date1, DateTime date2)
{
          date2 = date2.AddMonth(-1);
          int result = DateTime.Compare(date1, date2);
          return result ==0;
}
2

@mariano901229

date2.AddMonths(-1); - To nie zadziała, bo AddMonths zwraca nowy DateTime :)

Tak zadziała (można to w sumie w jednej linijce zapisać):

public static bool CheckWrongDate(DateTime date1, DateTime date2) {
    return DateTime.Compare(date1, date2.AddMonths(-1)) == 0;
}
0

Spróbujcie zrozumieć "biznes" tej metody bo chyba trochę nie zrozumieliście ;)

0

Grzesiu nie wiem jak działa twój debuger :D ale mój działa tak :D

522a66a920.png

0

Ja się już nie będę wypowiadał. Ciężko się domyślić, że postawiłem trapa w tym miejscu?:

if (differenceDate.Month == correctMonth.Month && differenceDate.Year == correctMonth.Year)
    {
        isWrong = false;    // <<-- TRAP
    }

I dlatego isWrong jest u mnie ustawione na true, ponieważ nie miało kiedy się przestawić. Nie zmienia to oczywiście faktu, że ten kod działa nieprawidłowo i podane Ci zostały już dwa rozwiązania jak to naprawić. Ty jednak wolisz wyśmiewać posty, osób które starają Ci się pomóc i twierdzić, że ludzie nie ogarniają "biznesu" tej metody, bez nawet krzty wytłumaczenia o co chodzi.

To baw się dalej - robię out :)

A na przyszłość radzę trochę więcej skromności, bo to naprawdę się przydaje :)

0

Nie bardzo rozumiem gdzie kod działa nieprawidłowo :) ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1