Witajcie.
Piszę prostą aplikację w Turbo Delphi. Chcę w bazie zapisywać czas w postaci uniksowego znacznika czasu. Do pobierania daty i godziny chciałem wykorzystać kontrolkę DateTimePicker. Jednak on pozwala na wyświetlanie albo daty, albo godziny. Czy da się to jakoś obejść, czy muszę wykorzystać dwie takie kontrolki (data i czas), a następnie jakoś to połączyć. Jeśli to drugie rozwiązanie, to jak to połączyć?
0
1
Na upartego można w jednym ale moim zdaniem lepiej użyć dwóch komponentów ponieważ wybranie daty jest bardzo niewygodne (trzeba zaznaczyć co chcemy zmienić np. miesiące i wtedy strzałeczkami) i niezbyt dobrze to wygląda zobacz sam:
uses DateUtils;
procedure TForm1.FormCreate(Sender: TObject);
var
formatSettings : TFormatSettings;
SelectedDateTime: TDateTime;
SelectedDateTimeUnix: Int64;
begin
//tak masz w jednym date i czas ale sam przyznasz ze to niewygodne
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formatSettings);
DateTimePicker.Format:= formatSettings.ShortDateFormat + ' ' + formatSettings.LongTimeFormat;
SelectedDateTime:= DateTimePicker.DateTime;
//w przypadku uzycia dwóch komponentow
DateTimePickerDate.DateFormat:= dfShort;
DateTimePickerDate.Kind:= dtkDate;
DateTimePickerTime.Kind:= dtkTime;
SelectedDateTime:= EncodeDateTime(YearOf(DateTimePickerDate.Date),
MonthOf(DateTimePickerDate.Date), DayOf(DateTimePickerDate.Date),
HourOf(DateTimePickerTime.Time), MinuteOf(DateTimePickerTime.Time),
SecondOf(DateTimePickerTime.Time),0);
SelectedDateTimeUnix:= DateTimeToUnix(SelectedDateTime);
end;
0
Ok. Ale jeśli użyję dwóch komponentów, to jak nich obliczyć Unix timestamp?
0
Faktycznie. Dzięki. :)
2
SelectedDateTime:= Trunc(DateTimePickerDate.Date) + Frac(DateTimePickerTime.Time);
można tak ponieważ data jest zapisywana w części całkowitej a czas w części ułamkowej. Np. 1 godzina to 1/24 a 1 minuta to 1/24/60