TDateTimePicker i Unix timestamp

0

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ć?

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

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