juice |
Отправлено: 09.02.2005, 17:21 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 33
|
Как преобразовать вариантный тип в обычный (дата-время) ? В Delphi там есть метод .AsDate. А как в Buildere?
Делаю так:
Variant vDate;
TDateTime tDate;
vDate = "02.01.2005";
tDate = vDate.VDate;
ShowMessage( DateToStr(tDate) ); //тут показывается левая дата доисторических времен
|
|
Guest |
Отправлено: 09.02.2005, 17:27 |
|
Не зарегистрирован
|
Variant vDate = TDateTime("02.01.2005",Date);
зависит от национальных настроек |
|
juice |
Отправлено: 09.02.2005, 17:39 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 33
|
Так не подходит.
Это я привел как-бы пример, а настоящий код более похож на:
Variant vDate;
TDateTime tDate;
vDate = fromExcelCell(Sh, 1, 4);
ShowMessage(fromExcelCell(Sh, 1, 4)) //выводит 02.01.2005
// вот теперь надо преобразовать:
tDate = vDate.VDate;
ShowMessage( DateToStr(tDate) ); |
|
Gedeon |
Отправлено: 09.02.2005, 17:49 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Так подойдет?
CODE |
Variant v;
v = Now();
TDateTime DT = v.operator TDateTime();
ShowMessage(DT.FormatString("dd.mm.yyyy hh:mm:ss")); |
|
|
AVC |
Отправлено: 09.02.2005, 17:51 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Тогда еще проще (если вы уверены,что Excel возвращает тип TDate/TDateTime)
tDate = vDate;
А если не DateTime то нужно применить соответствующий конструктор.
Список и параметры доступны по F1 |
|
juice |
Отправлено: 09.02.2005, 17:59 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 33
|
Т том-то и дело, что fromExcelCell возвращает Variant.
2Gedeon : Это уже ближе к теме, теперь я увидел что
ShowMessage(DT.FormatString("dd.mm.yyyy hh:mm:ss"));
показывает : "30.12.1899 03:02:05".
03.02.05 — это и есть дата которая в ячейке екселевской лежит. Но теперь возник вопрос — а почему дата очутилась в поле времени? |
|
Guest |
Отправлено: 09.02.2005, 18:07 |
|
Не зарегистрирован
|
QUOTE | том-то и дело, что fromExcelCell возвращает Variant
|
У каждого варианта есть тип хранимого значения или Empty/Null. |
|
juice |
Отправлено: 09.02.2005, 18:33 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 33
|
Ти значения этой функции varOleStr 0x0008 Reference to a dynamically allocated Unicode string.
Народ! Вот на уникальную проблему наткнулся (она может решить все мои страдания)
rDate = StrToDate("03.02.05"); — в рантайме выдает ошибку -
EConvertError with message ''03.02.05' is not a valid date and time.
Какого "03.02.05' а не '03.02.05' ??? Глюк билдера?
|
|
juice |
Отправлено: 09.02.2005, 19:18 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 33
|
Уже Горячо:
rDate = StrToDate("03/02/05"); Не выдает ошибку! Теперь вопрос — как заставить понимать эту функцию формат через точку ане косую? |
|
juice |
Отправлено: 09.02.2005, 19:32 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 33
|
Нашел такую вырезку:
Funсtiоn StrТоDаtе(соnst S: String): ТDаtеТimе;
Преобразовывает строковое представление даты в формат ТDаtеТimе. Дата в
параметре S должна быть записана по правилам Windоws, т.е. должна состоять
из двух или трех чисел, отделяемых символом, определенным в глобальной
переменной DаtеSераrаtоr
Что значит "глобальная переменная" ? Это переменная окружения ОС ? Если так то там и в помине такого нету. Что это такое и как ее изменить ? |
|
HKarel |
Отправлено: 09.02.2005, 23:56 |
|
Не зарегистрирован
|
DаtеSераrаtоr — это не глобальная переменная окружения ОС, это глобальная переменная "окружения Борланд", инициализируется при запуске программы, а берет свое значение скорее всего по следующему "адресу": Панель управления -> Языки и региональные стандарты -> Региональные параметры -> Настройка -> Дата -> Разделитель компонентов даты. |
|
AVC |
Отправлено: 10.02.2005, 10:12 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
2juice
QUOTE |
Ти значения этой функции varOleStr 0x0008 Reference to a dynamically allocated Unicode string.
|
От Excel вы получаете строку (возможно ее значение зависит от формата ячейки Excel). Не надо шаманить с функцией StrToDate. Надо преобразовать эту строку к виду, понимаемому конструктором TDateTime (заменой разделителя, изменением локальных настроек ...).
Для стабильной работы приложения нужно заставить Excel возвращать дату в каком либо унифицированном формате и настроить приложение под этот формат. Хорошо бы получить эту дату как int/float тогда все станет легко. |
|