OK, chyba już wiem w czym problem. Przyjrzałem się temu filtrowi i policzyłem sobie coś ręcznie dla przykładowego maila. Załóżmy, że chcę znaleźć różnice większe niż 20 dni. Czy to nie jest tak, że ten filtr odejmuje od siebie po prostu dwie duże liczby, które zbudował na podstawie dat?
Jeśli dobrze rozumiem, filtr najpierw pobiera datę received, która w moim przypadku wynosi powiedzmy 20050202. Następnie odejmuje od niej datę utworzenia, powiedzmy 20050102 i wychodzi mu wartość 100 (choć w rzeczywistości odstęp pomiędzy tymi dniami to 30 dni).
W końcu podnosi tę wartość do kwadratu i otrzymuje 10000 i sprawdza, czy jest większa od kwadratu dni, czyli w moim przypadku 20*20=40.
Klasyfikuję tę wiadomość jako taką, w której data jest zła i słusznie.
Ale weźmy inny przykład, na przykład wiadomość odebrana dnia 20050102 a utworzona 20041231. Wtedy mamy 20050102-20041231=8`871. Po podniesieniu do kwadratu otrzymujemy wartość 177`844`413`611, która też jest większa od 400, choć rzeczywista różnica pomiędzy wiadomościami to zaledwie 3 dni.
Czy nie jest to jakiś trop w kierunku tego, skąd biorą się błędy? Może chodzi o to, że odejmując YYYYMMDD od YYYYMMDD nie bierzemy pod uwagę tego, że miesiąca ma w przybliżeniu 30 dni a miesięcy w roku jest 12, tylko odejmujemy od siebie dwie duże liczby nie biorąc pod uwagę tego, że np. liczba 20109999 nie może tutaj istnieć?
Mam nadzieję, że nie zakręciłem za bardzo.
Może więc w jakiś sposób zmusić Bata, żeby przekodował te daty w następujący sposób:
data2= DD + 30 * MM + 365 * YYYY
i dopiero je od siebie odejmował?
Wtedy oczywiście założylibyśmy, że każdy miesiąc ma z grubsza 30 dni, ale takie uproszczenie niewiele zmienia. Możnaby nawet od każdego YYYY odjąć liczbę 2000, żeby operować mniejszymi liczbami, bo i tak wszystkie wiadomości mają daty od roku 2000 do 2005. Wtedy ten podany wyżej przykład, który wcześniej nie zadziałał, miały szansę zadziałać, bo:
data2_received= 02 + 30*01 + 5*365=1`857
oraz
data2_created=31 +12*30 + 4*365=1`851
A następnie data2_received - data2created=6
co podniesione do kwadratu daje 36, czyli liczbę mniejszą od 400, a więc zgodnie z oczekiwaniami wiadomosc nie byla by zaklasyfikowana do problemowych.
Pytanie tylko czy to moje rozumowanie ma sens i jak przekodować je na język the Bata. Z informatyką ani programowaniem nie mam nic wspólnego.