BCB6 sprawdzenie dwóch dat. 1 pochodzi z MaskEdit a druga z funkcji Date()

0

cześć

potrzebuję porównać dwie daty czy pierwsza jest większa, mniejsza czy równa drugiej.
Pierwszą datę otrzymuję z komponentu MaskEdit->Text a formacie "DD-MM-YYYY"
Drugą pobieram funkcją Date()
Próbowałem już robić coś takiego

String MaskEditText = me3->Text.Trim();
        String year = MaskEditText.SubString(7,4);
        String month = MaskEditText.SubString(4,2);
        String day = MaskEditText.SubString(1,2);
        MaskEditText =  year+"-"+month+"-"+day;
        String systemDateText = Date().FormatString("YYYY-MM-DD");

        TDateTime MaskEditDate = StrToDate(MaskEditText);
        TDateTime systemDate = StrToDate(systemDateText);
if(MaskEditDate > systemDate)
        {
                ShowMessage("MaskEditDate > systemDate");
        }
        if(MaskEditDate == systemDate)
        {
                ShowMessage("MaskEditDate = systemDate");
        }
        if(MaskEditDate < systemDate)
        {
                ShowMessage("MaskEditDate < systemDate");
        }

ale cały czas przy konwersji
``TDateTime MaskEditDate = StrToDate(MaskEditText);
TDateTime systemDate = StrToDate(systemDateText);`

wywala mi błąd np. '2000-01-01' is not a valid date.
Nie rozumiem dlaczego skoro kompilator nie wywala żadnego błędu a data do konwersji jest podana w prawidłowym formacie.
1

Musisz poinformować program w jakim formacie masz datę. W nowszych wersjach C++ Builder przed pierwszym wywołaniem StrToDate musisz dodać:

FormatSettings.DateSeparator = '-';
FormatSettings.ShortDateFormat = "yyyy-MM-dd";

a w starszych zdaje się:

DateSeparator = '-';
ShortDateFormat = "yyyy-MM-dd";
0

W Borland C++ Builder 6 składnia:

FormatSettings.DateSeparator = '-';
FormatSettings.ShortDateFormat = "yyyy-MM-dd";

Nie działa, błąd:
"Undefined symbol 'FormatSettings'

a z kodem:

DateSeparator = '-';
ShortDateFormat = "YYYY-MM-DD";

wszystko się kompiluje ale program wywala dalej ten sam bład.

0

Czym jest DateSeparator? Może jest stringiem i powinieneś przypisać "-"?

Swoją drogą, jak jesteśmy już przy BCB6 i porównywaniu dat, to porównaj sobie 2001 - rok wydania BCB6 - i 2019 - rok obecny. Może wypadałoby wybrać coś mniej... pełnoletniego?

0

Nie wiem gdzie to dodałeś ale to niemożliwe przecież ten kod powinien ustawić taki format daty dla aplikacji a z tego co piszesz masz datę w takim formacie i powinno działać. Zresztą specjalnie zainstalowałem stary BCB 6 i u mnie działa.
Tak ma być wstawione

		String systemDateText = Date().FormatString("YYYY-MM-DD");

		DateSeparator = '-';
		ShortDateFormat = "yyyy-MM-dd";

		TDateTime MaskEditDate = StrToDate(MaskEditText);

a jak nie działa to debugger i sprawdź co masz w zmiennej MaskEditText powinna być data np. 2019-03-08

0

Coś przekombinowałem. Stworzyłem sobie mały projekt na boku i na czysty projekt wrzuciłem Twój kod i działa :)

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