jak zamienić std::string str= "7/20/2023 9:31:30 AM"
na TDateTime
?
jak powinien wyglądać format dla tego typu daty aby zadziałała funkcja StrToDateTime
?
W jakim języku piszesz program? TDateTime to jest w Pascalu, ale zapis std::string str= "7/20/2023 9:31:30 AM"
to jest raczej C++. Chyba zaszła jakaś pomyłka.
Pomijając powyższe, jednym z uniwersalnych sposobów jest przetworzenie znak po znaku, żeby wypisać same liczby do listy w ten sposób, że poczynając od pustej listy:
- Dodaj do listy jeden pusty string
- Dla każdego znaku ciągu wejściowego:
2.1. Jeżeli cyfra, to dopisz jako kolejny znak do ostatniej pozycji na liście.
2.2. Jeżeli nie-cyfra i ostatnia pozycja na liście nie jest pusta, to dodaj do listy pusty string.
Dostaniesz listę z liczbami w formie tekstowej, pozycja na liście wskazuje, którą częścią daty jest dana liczba. Jeszcze dodatkowo należy sprawdzić, czy w ciągu wejściowym jest słówko "AM", czy "PM".
Mając tą listę, możesz od podstaw zbudować obiekt TDateTime wykorzystując te liczby zamieniają je w locie ze string na integer.
Tu opis, w jakiej formie przyjmuje StrToDateTime:
https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.SysUtils.StrToDateTime
https://4programmers.net/Delphi/StrToDateTime
https://www.delphibasics.co.uk/RTL.php?Name=StrToDateTime
Widocznie przyjmuje różne formaty, celem jest przerobienie string na najbliższy, ale akceptowany format.
Jeżeli StrToDateTime akceptuje format '23/02/2075 12:34:56' (nie mam możliwości tego sprawdzić), to obcinasz 3 ostatnie znaki i wykonujesz jedną z czynności na cyfrze godzin po utworzeniu obiektu TDateTime:
- Jeżeli jest " AM" i godzina = 12, to odejmujesz 12.
- Jeżeli jest " PM" i godzina <> 12, to dodajesz 12.
- W pozostałych przypadkach nic nie zmieniasz.
std::string
- na pewno mówimy o Delphi?
W Delphi to by było zwyczajnie:
var
fs: TFormatSettings;
sDateTime: string;
begin
fs:= TFormatSettings.Create('en-US');
sDateTime:= DateTimeToStr(StrToDateTime('7/20/2023 9:31:30 AM', fs));
ShowMessage(sDateTime);
end;
Przepraszam, rzeczywistsze pomieszałem bo podałem kod w C++ (ostatnio rzadko jest Pascal)
@andrzejlisek: rozwiazanie pewnie by i zadziałało ale narobić się trzeba , a jest wszak gotowa funkcja tylko trzeba podać odpowiedni parametr formatu,
bardziej chodziło mi o to rozwiązanie by @kAzek:
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.