DateTimePicker юлианская дата
Как с помощью DateTimePicker получить юлианскую дату с учетом времени суток?
Стандартными средствами - никак. Считываешь дату и сам ее переводишь.
Формулы нашел.
Мне нужно ввести дату и время, а DateTimePicker имеет режимы либо даты, либо часов.
Мне ставить на форму два DateTimePicker?
Form1->DateTimePicker1->Format = "dd MMM yy - HH:mm";
А как обращаться к часам, минутам и секундам?
Спасибо за помощь!
Такой код работает корректно:
Label32->Caption=DateTimePicker1->Date;
Label32->Caption=DateTimePicker1->Date.DayOfWeek();
А такой выдает ошибку систаксиса:
Label32->Caption=DateTimePicker1->Date.Day;
Label32->Caption=DateTimePicker1->Date.Day();
Label32->Caption=DateTimePicker1->Date.Year;
Что неправильно?
unsigned short year, month, day;
DateTimePicker1->Date.DecodeDate(&year, &month, &day);
А можно ли извлечь из DateTimePicker отдельно год, не вводя новых переменных?
ShowMessage(DateTimePicker1->Date.FormatString("yyyy"));
У Вас он работает корректно?
В режиме dmUpDown не считывается время (дата считывается):
void __fastcall TForm1::DateTimePicker1Change(TObject *Sender)
{
unsigned short year,month,day,hour,min,sec,ms;
DateTimePicker1->Date.DecodeDate(&year,&month,&day);
DateTimePicker1->Date.DecodeTime(&hour,&min,&sec,&ms);
Label1->Caption=IntToStr(day); //считывается!
Label2->Caption=IntToStr(min); //не считывается!
}
Я бы рекомендовал испльзовать два компонента - один для времени, второй для даты.
Вначале я так и сделал, но мне удобнее иметь один DateTimePicker.
Как я выяснил, надо просто перед считыванием переключать программно DateTimePicker1 в соответствующий режим даты или времени.
Но как это сделать?
В режиме dmUpDown не меняется ни дата, ни время:
unsigned short year,month,day,hour,min,sec,ms;
DateTimePicker1->Kind = dtkDate;
DecodeDate(DateTimePicker1->Date,year,month,day) ;
DateTimePicker1->Kind = dtkTime;
DecodeTime(DateTimePicker1->Time,hour,min,sec,ms);
Label1->Caption=IntToStr(day);
Label2->Caption=IntToStr(min);
Если оставить только один из режимов Kind, то все работает!
Использование двух компонентов - один для даты, один для времени - единственный способ решить проблему при использовании DateTimePicker.
void __fastcall TForm1::DateTimePicker1Change(TObject *Sender)
{
float md;
unsigned short hour,min,sec,ms;
DecodeTime(DateTimePicker1->Time,hour,min,sec,ms);
md=float(sec)/86400+15078;
Label1->Caption=FloatToStr(md); //работает неправильно!
Label2->Caption=FloatToStr(float(sec)/86400+15078); //работает правильно
}
Что неправильно в первом варианте?
Замена на double помогла!