Format zapisu daty

BU
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 8 godzin
  • Postów:297
0

Dzień dobry ponownie,
Podpowiedzcie mi co zrobić. W bazie danych mam zapisaną datę w postaci YYYY-MM-DD HH:MM:SS.XXX. Godzina zawsze jest 00:00:00.000, więc nieistotna. Natomiast po pobraniu danych, data wyświetla mi się w formacie: DD.MM.YYYY. Niby zrozumiałe, polski system. Jak zrobić, aby wyświetlała się w formacie: YYYY-MM-DD??? Wiem, że lamerskie pytanie, ale nie mogę sobie z tym poradzić.


Pozdrawiam
Buster
robertz68
a w czym wyświetlasz tą datę?
BU
No właśnie w niczym. Pobieram i zapisuję do zmiennej, aby potem zapisać do pliku.
Mariusz Bruniewski
Mariusz Bruniewski
Do tego służy formatdatetime FormatDateTime
PD
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 11 godzin
0

możesz ustawić właściwość DisplayFormat dla konkretnego pola na yyyy-mm-dd


pozdrawiam
paweld
BU
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 8 godzin
  • Postów:297
0

To może doprecyzuję. Wykorzystuję tylko te dane, zapisuję do zmiennej, a potem do pliku. Nie wyświetlam jej sensu sctricte. Może trochę źle napisałem, wyświetla.


Pozdrawiam
Buster
PD
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 11 godzin
2
Kopiuj
FormatDateTime('yyyy-mm-dd', query.FieldByName('Data').AsDateTime);

pozdrawiam
paweld
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
0
Buster napisał(a):

Dzień dobry ponownie,
Podpowiedzcie mi co zrobić. W bazie danych mam zapisaną datę w postaci YYYY-MM-DD HH:MM:SS.XXX. Godzina zawsze jest 00:00:00.000, więc nieistotna. Natomiast po pobraniu danych, data wyświetla mi się w formacie: DD.MM.YYYY. Niby zrozumiałe, polski system. Jak zrobić, aby wyświetlała się w formacie: YYYY-MM-DD??? Wiem, że lamerskie pytanie, ale nie mogę sobie z tym poradzić.

Załóżmy optymistycznie, że w bazie masz prawdziwą kolumnę datową (binarnie, ona nie ma żadnego formatu).
Formatuje narzędzie, którym to oglądasz.

Literalnie traktując Twoją wypowiedź, by wychodziło, że masz w polu znakowym sformatowaną w pewien sposób. Precyzja określeń JEST ważna.


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Tuchów
  • Postów:12171
2

@Buster: jeśli masz datę zapisaną w zmiennej (obstawiam, że typu TDateTime), to możesz ją przekonwertować na ciąg znaków np. za pomocą funkcji FormatDateTime. Możesz określić format danych (kolejność składowych) oraz podać strukturę z ustawieniami regionalnymi (albo tego nie robić i skorzystać z tej domyślnej). Przykład:

Kopiuj
var
  DateTime: TDateTime;
  DateLine: String;
begin
  DateTime := Now();
  DateLine := FormatDateTime('YYYY-MM-DD', DateTime);

W zmiennej DateLine znajdzie się łańcuch 2020-08-03.


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.
BU
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 8 godzin
  • Postów:297
0

Dziękuję za wyczerpujące wykłady. Podpowiedź, której funkcji użyć z powodzeniem wystarczyła. Ja nie jestem taki do końca zielony. ;)


Pozdrawiam
Buster
Mariusz Bruniewski
Mariusz Bruniewski
  • Rejestracja:prawie 20 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Świecie
0
Kopiuj
procedure TForm1.Button1Click(Sender: TObject);
var
  Data : TDateTime;
begin
  Data := Now();
  Caption := FormatDateTime('YYYY-MM-DD, HH:MM:SS:ZZZ', Data);  // myslę, że zamiast XXX powinno być ZZZ
end;

Po drugie moim zdaniem żadne bazy nie bawią się w zapis milisekund do odczytu dla uzytkownika. Ograniczają się dla bezpieczeństwa co do zapisu HH:MM:SS. No chyba, że Masz do czynienia z zegarem atomowym, który jest w Niemczech. O co mi dokładnie chodzi. a o to, że kiedy Tworzysz zmienną a ona jest przypisana HH:MM:SS nie musisz bawić się w milisekundy. Np Janek HH:MM:SS, Bartek HH:MM:SS. Zapis do bazy danych musi być zawsze natychmiastowy, beż żadnych ozdobników. One już same mogą w swej istocie spowolnić prace procesora a co za tym idzie przekłamanie ZZZ.


Umysł pozytywny szuka sposobów, jak coś wykonać; umysł negatywny wyszukuje sposoby, by uzasadnić, że czegoś nie można zrobić.
~~ Napoleon Hill ~~
edytowany 4x, ostatnio: Mariusz Bruniewski
WL
  • Rejestracja:ponad 21 lat
  • Ostatnio:13 dni
  • Postów:1083
3
Bruno(M) napisał(a):
Kopiuj
procedure TForm1.Button1Click(Sender: TObject);
var
  Data : TDateTime;
begin
  Data := Now();
  Caption := FormatDateTime('YYYY-MM-DD, HH:MM:SS:ZZZ', Data);  // myslę, że zamiast XXX powinno być ZZZ
end;

Po drugie moim zdaniem żadne bazy nie bawią się w zapis milisekund do odczytu dla uzytkownika.

MSSQL w typie datetime trzyma dane z dokładnością do 1/300 sekundy (a dokładnie wartkości milisekund jest zaokrąglana do najbliższej wartości 0,000, 0.003 lub .007), a w typie datetime2 z dokładnością do 100 nanosekund, a więc każda milisekunda zostanie zapisana.

I to by było tyle w temacie Twojego zdania.

Ograniczają się dla bezpieczeństwa co do zapisu HH:MM:SS.

Bezpieczeństwa?
A co tu jest niebezpiecznego?

No chyba, że Masz do czynienia z zegarem atomowym, który jest w Niemczech.

Ale mam do czynienia z (powiedzmy) IoT i potrzebuję takiej dokładności.

O co mi dokładnie chodzi. a o to, że kiedy Tworzysz zmienną a ona jest przypisana HH:MM:SS nie musisz bawić się w milisekundy. Np Janek HH:MM:SS, Bartek HH:MM:SS.

To że tak to widać, to nie oznacza że w tej zmiennej tych wartości nie ma.
Format wyświetlania a same dane, to są dwie zupełnie różne i niezależne od siebie sprawy.

Zapis do bazy danych musi być zawsze natychmiastowy, beż żadnych ozdobników. One już same mogą w swej istocie spowolnić prace procesora a co za tym idzie przekłamanie ZZZ.

To są jakieś czary i zaklinanie rzeczywistości a nie rzetelna wiedza.

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.