Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ TDateTime

Автор: sheka 20.11.2010 19:39

Помогите строковое представление времени '15:06:23.456' перевести в TDateTime. StrToTime на миллисекунды почему-то бушует.

И как можно из TDateTime получить количество миллисекунд именно времени, кроме как разбитием DecodeTime(myDate, myHour, myMin, mySec, myMilli); и потом суммой произведений?

Автор: volvo 20.11.2010 20:11

Цитата
StrToTime на миллисекунды почему-то бушует.
StrToTime использует формат, заданный в LongTimeFormat...

Выстави перед преобразованием
LongTimeFormat := 'hh:nn:ss.zzz';

, не будет бушевать.

Цитата
И как можно из TDateTime получить количество миллисекунд именно времени

Uses DateUtils;
// ...
var ms: Word;
ms := MillisecondOf(Now);

Автор: sheka 20.11.2010 21:12

Неа smile.gif Я уже так пробовал - не хочет.

Автор: volvo 20.11.2010 21:20

Показывай, как пробовал, у меня отработало только что...

Автор: sheka 20.11.2010 21:39

Делфи 7 и 2010 пишут на вот это

  LongTimeFormat := 'hh:mm:ss.zzz';
DT := StrToTime('11:11:11.111');
вот такую кляузу:Прикрепленное изображение

Автор: volvo 20.11.2010 21:44

Я не сказал 'hh:mm:ss.zzz', я сказал 'hh:nn:ss.zzz'...

mm - это обозначение месяца для данной функции.

Автор: sheka 20.11.2010 21:59

Все равно.

Добавлено через 3 мин.

procedure FillPausesTime;
var
DT: TDateTime;
begin
LongTimeFormat := 'hh:nn:ss.zzz';
DT := StrToTime('11:11:11.111');
end;

Автор: volvo 20.11.2010 22:18

Очень интересно...




Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Client 20.11.2010 22:26

у меня тоже ошибка wacko.gif


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: volvo 20.11.2010 22:49

blink.gif TimeSeparator проверьте, он должен содержать ':'. Других причин для вылета StrToTime просто не существует.

Добавлено через 3 мин.
А, вот еще что... Проверьте вот такое:

 DT := StrToTime('11:11:11,111');

, в русскоязычных системах DecimalSeparator - запятая, так и используйте запятую в строке со временем. Или меняйте не только LongTimeFormat, но и DecimalSeparator...

Автор: Client 20.11.2010 22:58

да да, несчастная запятая
good.gif

Автор: sheka 22.11.2010 3:49

Спасибо! До DecimalSeparatorа никогда бы не догадался)

А вот типа такого:

function MS(DT: TDateTime): Longint;
begin
result := MillisecondOf(DT) + 1000 * (SecondOf(DT) + 60 * (MinuteOf(DT) + 60 * HourOf(DT)));
end;
Встроенного ничего нет? smile.gif

Автор: volvo 22.11.2010 4:11

Насколько я понимаю, это аналог

function MilliSecondOfTheDay(const AValue: TDateTime): LongWord;

- функция возвращает количество миллисекунд от начала дня (полуночи) до времени, хранящегося в AValue...

Автор: sheka 22.11.2010 4:32

Оно!