Jak złożyć datę z integerów?

Jak złożyć datę z integerów?
D1
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 8 lat
  • Postów:165
0

Pracuję, na dwóch różnych komputerach. Na głównym mam w pliku daty w formacie 'dd.mm.yyyy'. Niestety dla drugiego komputera ten format daty jest nieczytelny. Z tego powodu zmieniłem w pliku tekstowym format daty na 'yyyy-mm-dd'. Zadziałało, ale po przeniesieniu się na komputer główny tym razem tam format daty był nieczytelny. Tak więc wróciłem do pierwotnego formatu.

Dziś znowu drugi komputer nie może odczytać daty przy użyciu StrToDate();. W takiej sytuacji pomyślałem, że napiszę własną funkcję która będzie konwertować mi taki format zawszę na datę, bez względu na komputer.

Póki co wyciągnąłem ze Stringa 3 zmienne Dzien, Miesiac, Rok typu Integer. Jednak nie mogę wymyślić jak teraz złożyć z nich datę, tak by nie było problemów na żadnym komputerze :/

woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 19 godzin
  • Postów:1597
1

Trzymaj zmienną z datą jako TDate/TDateTime w programie i używaj funkcji: http://4programmers.net/Delphi/FormatDateTime do wyświetlania jako string.

edytowany 3x, ostatnio: woolfik
D1
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 8 lat
  • Postów:165
0

Problem w tym, że ja mam datę zapisaną w pliku tekstowym więc jak ją odczytuję to jest Stringiem i z wyświetleniem nie mam problemu, bo to String. Ale ja chcę skonwertować ją na typ TDateTime poprzez StrToDate i tu się pojawia problem ``EConverError "15.10.2015" is not a valid date format

woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 19 godzin
  • Postów:1597
1

No to masz http://4programmers.net/Delphi/TFormatSettings, gdzie możesz określić format

edytowany 2x, ostatnio: woolfik
D1
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 8 lat
  • Postów:165
0

Nic to nie dało, albo nie potrafię tego użyć.

Ale za to znalazłem funkcję EncodeDate();, która jest dokładnie tym czego szukałem, mając 3 zmienne liczbowe reprezentujące dzień, miesiąc i rok.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12171
1

@dani17 - znalazłeś rozwiązanie dla problemu, który sam sobie stworzyłeś;

Prawidłowym i sensownym rozwiązaniem jest skorzystanie np. z pary funkcji DateToStr i StrToDate; W razie czego dostępny jest wariant z możliwością podania własnego rekordu typu TFormatSettings.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE
woolfik
Lepiej bym tego nie ujal
D1
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 8 lat
  • Postów:165
0

Ale ja korzystałem z StrToDate i na jednym komputerze to działało, a na drugim nie. Na trzecim mogłoby działać, a na czwartym znowu nie. W tym momencie sobie stworzyłem rozwiązanie które zadziała zawsze.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12171
0

Bo na tych dwóch komputerach mogą być różne dane dotyczące formatowania łańcuchów znaków zawierających zapis daty i/lub czasu; No to ustal wartość pola DateSeparator w rekordzie typu TFormatSettings i przekaż taki rekord do funkcji;

Edit: Ewentualnie sprawdź dlaczego <abbr title="użyj debuggera, potestuj różne warianty">dokładnie</abbr> tworzony jest wyjątek; Możliwe, że to nie DateSeparator jest niedobry - sam format daty może się nie zgadzać (LongDateFormat lub ShortDateFormat).


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.