Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизВычитение даты-времени Найти похожие ветки
← →
oleg1963lora (2010-04-05 09:44) [0]Здравствуйте Мастера! Есть такой код:
var MyMinDateTim, MyMaxDateTime : TDateTime;
year,month,day,hour,min,sec,msec : word;
vremya, vremya2 : string;
begin
vremya:="01.03.2010 09:18";
vremya2:="01.03.2010 09:19";
MyMinDateTime:=StrToDateTime(vremya);
MyMaxDateTime:=StrToDateTime(vremya2);
MyMaxDateTime:=MyMaxDateTime-MyMinDateTime;
DecodeDateTime(MyMaxDateTime,year,month,day,hour,min,sec,msec);
При вычитании получаю:
year=1899
month=12
Day=30
Hour=0
Min=1
sec=0
msec=0.
Подскажите пожалуйста где я ошибаюсь?
← →
И. Павел © (2010-04-05 09:47) [1]Все нормально. Время высчитывается от 1899 года. Тоесть MyMaxDateTime содержит 0.0***1, но это воспринимается как 1899 год.
← →
И. Павел © (2010-04-05 09:48) [2]Тоесть, например:
procedure TForm2.Button1Click(Sender: TObject);
var D:TDateTime;
begin
D:=0;
Caption:=DateTimeToStr(D);
end;
Показывает: 30/12/1899
← →
Anatoly Podgoretsky © (2010-04-05 09:49) [3]> oleg1963lora (05.04.2010 09:44:00) [0]
Ошибок нет, результат правильный, только почему ты считаешь что в результате вычитания у тебя будет датавремя?
Это раз, а два - а как ты хочешь, это совсем не понятно.
← →
oleg1963lora (2010-04-05 09:50) [4]А как тогда получить
year=0
month=0
Day=0
Hour=0
Min=1
sec=0
msec=0 ?
← →
Anatoly Podgoretsky © (2010-04-05 09:51) [5]> oleg1963lora (05.04.2010 09:50:04) [4]
Просто от результата отнять 1899,12,30
← →
oleg1963lora (2010-04-05 09:52) [6]
> Anatoly Podgoretsky
Спасибо, понял.
← →
Anatoly Podgoretsky © (2010-04-05 09:54) [7]> oleg1963lora (05.04.2010 09:52:06) [6]
Тогда проверочное задание, приведи функцию преобразования, а то есть сомнение что ты опять понял, что ты не путаешь дату с интервалом
← →
oleg1963lora (2010-04-05 10:07) [8]
> что ты не путаешь дату с интервалом
Не понял вопроса. Нужно из TStringList удалить строки с минутами не кратными 12
← →
Sha © (2010-04-05 10:07) [9]> oleg1963lora (05.04.10 09:50) [4]
> А как тогда получить year=0
> Anatoly Podgoretsky © (05.04.10 09:51) [5]
> Просто от результата отнять 1899,12,30
Ща запутаю :)
Потом попытайся длину интервала выразить в часах.
← →
И. Павел © (2010-04-05 10:16) [10]
[8] oleg1963lora (05.04.10 10:07)
Используйте:
DecodeTime(Time, Hout, Min, Sec, MSec)
← →
oleg1963lora (2010-04-05 10:20) [11]Так ?
MyMaxDateTime:=MyMaxDateTime-MyMinDateTime;
DecodeDateTime(MyMaxDateTime,year,month,day,hour,min,sec,msec);
year:=year-1899;
month:=month-12;
day:=day-30;
Year:=Year*Month*Day*Hour*Min;
Month:=Month*Day*Hour*Min;
Day:=Day*Hour*Min;
hour:=Hour*Min;
T:=Year+Month+Day+Hour+Min;
if not (T in [11..13]) then
SummList.Delete(i+1);
← →
Anatoly Podgoretsky © (2010-04-05 10:28) [12]> oleg1963lora (05.04.2010 10:20:11) [11]
Объясни суть данно манипуляции?
Year:=Year*Month*Day*Hour*Min;
← →
И. Павел © (2010-04-05 10:28) [13]> Year*Month*Day*Hour*Min
???
Зачем их перемножать? Я не понял алгоритм...
Строки, не кратные 12, это:
1.2.2009 1:12
1.2.2009 1:24
1.2.2009 1:36
Или же нужно считать число минут с нулевого года, и проверять на кратность это число?
← →
Anatoly Podgoretsky © (2010-04-05 10:29) [14]> Sha (05.04.2010 10:07:09) [9]
Лучше и правильнее в сутках, иначе действительно запутаешь, хотя ты не нужен - это он с успехом сделает и без тебя.
← →
Anatoly Podgoretsky © (2010-04-05 10:30) [15]
> Не понял вопроса. Нужно из TStringList удалить строки с
> минутами не кратными 12
Откуда взялся TStringList и кратность 12
← →
oleg1963lora (2010-04-05 10:43) [16]
> Откуда взялся TStringList и кратность 12
Есть входной текстовый файл, который я заливаю в стринглист и парсингую на дату, время и значение:
01.03.2010 9:17 51,67450333
01.03.2010 9:18 50,23653793
01.03.2010 9:19 50,01485062
01.03.2010 9:20 50,05120087
01.03.2010 9:21 49,83310699
01.03.2010 9:22 50,04480743
01.03.2010 9:23 50,07955933
01.03.2010 9:24 50,54929733
01.03.2010 9:25 50,60521698
Если разница между соседними строками по времени не входит в диапазон 11-13 минутами их надо удалить. Цель - сокращение входного файла
← →
Sha © (2010-04-05 10:49) [17]> Anatoly Podgoretsky © (05.04.10 10:29) [14]
Еще можно считать интервал в минутах...
← →
И. Павел © (2010-04-05 10:52) [18]Если разница между датами [0.0076389...0.009027778] то они отличаются на 11-13 минут.
← →
Sha © (2010-04-05 10:53) [19]> oleg1963lora (05.04.10 10:43) [16]
> Если разница между соседними строками по времени не входит в диапазон 11-13 минутами их надо удалить.
Интересно, какой результат ожидается, если соседние строки следуют через час?
← →
Sha © (2010-04-05 10:57) [20]> oleg1963lora (05.04.10 10:43) [16]
> Есть входной текстовый файл, который я заливаю в стринглист и парсингую
Нафига грузить все, если нужна часть?
← →
oleg1963lora (2010-04-05 11:01) [21]
> Интересно, какой результат ожидается, если соседние строки
> следуют через час?
В урну! Доктор сказал - в морг!
← →
Sha © (2010-04-05 11:04) [22]> oleg1963lora (05.04.10 11:01) [21]
К сожалению для тебя, в Паскале нет такого оператора.
← →
Sha © (2010-04-05 11:15) [23]Когда вместо того, чтобы обдумать алгоритм, у программиста возникает желание
скорее начать стучать по клавиатуре, то неизбежно рождается бред вроде
> Если разница между соседними строками по времени не входит в диапазон 11-13 минутами их надо удалить.
← →
Anatoly Podgoretsky © (2010-04-05 11:18) [24]> oleg1963lora (05.04.2010 10:43:16) [16]
Что то мне кажется, что подобная ветка уже была, так ничем и кончилась
Дату привести к TDatetime и умножить на 1440 дальше остаток от деления на 12 и анализ результата
← →
Jeer © (2010-04-05 11:20) [25]
> oleg1963lora (05.04.10 11:01) [21]
Очень запущенный случай.
← →
Jeer © (2010-04-05 11:22) [26]
> Что то мне кажется, что подобная ветка уже была, так ничем
> и кончилась
10-го марта это обсуждалось.
За это время можно было хотя бы китайский выучить.
← →
oleg1963lora (2010-04-05 11:24) [27]
> Что то мне кажется, что подобная ветка уже была, так ничем
> и кончилась
В том-то и дело. Сейчас идет речь о моем увольнении, так что Спасите мою задницу!
← →
Jeer © (2010-04-05 11:24) [28]
> и умножить на 1440 дальше остаток от деления на 12 и анализ
> результата
время измерения может так и не попасть в желаемый диапазон, а в итоге все выкинется.
Ему уже предлагалось сделать интерполяцию с шагом 12 минут - не дошло, видимо.
← →
Jeer © (2010-04-05 11:26) [29]
> В том-то и дело. Сейчас идет речь о моем увольнении, так
> что Спасите мою задницу!
Можно, конечно, тебе помочь и решить за тебя эту задачу. Однако, насколько мне известно, за решение "тобой" одной задачи тебе не станут платить вечно - появятся другие задачи и что ты будешь делать ?
Опять бегать по форумам ?
← →
Anatoly Podgoretsky © (2010-04-05 11:31) [30]> oleg1963lora (05.04.2010 11:01:21) [21]
Вот так с предыдущим обсуждением и поступили, отправили в урну.
← →
Anatoly Podgoretsky © (2010-04-05 11:33) [31]> Jeer (05.04.2010 11:22:26) [26]
Точно и точно такое же бардачное обсуждение, видимо безнадежно.
← →
Anatoly Podgoretsky © (2010-04-05 11:34) [32]> oleg1963lora (05.04.2010 11:24:27) [27]
Я думаю лучше выбор сделать в пользу предприятия, выгоднее спасать его.
← →
Anatoly Podgoretsky © (2010-04-05 11:34) [33]> Jeer (05.04.2010 11:24:28) [28]
Я по техзаданию, а если оно неправильное, то я не виноват.
← →
Anatoly Podgoretsky © (2010-04-05 11:35) [34]> Jeer (05.04.2010 11:26:29) [29]
Форумов не хватит.
← →
И. Павел © (2010-04-05 11:41) [35]Коллеги, давайте не будем флудить, раз у человека серьезные проблемы, а отвечать по деля.
Формат TDateTime представляет дату как дробное число, в котором целая часть - число дней, прошедших с како1-то даты 1989 года, а дробная часть - часть от прошедшего дня (например 0.5 - это полдень). Исходя из этого можно анализировать разницу между двумя датами.
> Дату привести к TDatetime и умножить на 1440 дальше остаток
> от деления на 12 и анализ результата
Вот, в частности, способ. Или просто из разницы дат выделять минуты функцией EncodeTime
← →
И. Павел © (2010-04-05 11:42) [36]деля -> делу :)
прошедших с како1-то даты -> прошедших с какой-то даты
← →
Anatoly Podgoretsky © (2010-04-05 11:49) [37]> И. Павел (05.04.2010 11:41:35) [35]
Он этого не понимает, это уже вторая ветка.
← →
И. Павел © (2010-04-05 11:49) [38]Вот тут лбсуждался аналогичный вопрос:
http://forum.sources.ru/index.php?act=ST&f=11&t=81193
← →
Sha © (2010-04-05 11:49) [39]> oleg1963lora (05.04.10 11:24) [27]
> Спасите мою задницу!
Мысленно строим график результатов измерений от времени (непрерывная кусочно-линейная функция).
Сохраняем ее значения в точках, соответствующих нужным моментам времени.
← →
Desdechado © (2010-04-05 12:39) [40]Одного не понимаю: почему автор считает, что результат разности двух дат - это дата?
Вот из 5 апреля вычесть 1 апреля - это что, 4 апреля будет, что ли? Дуристика какая-то. Разница - 4 дня, т.е. длина интервала времени, но никак не дата. Так зачем же результат приводить к дате?
А вот эта длина интервала - суть дробное число, в сутках, которое уже можно проанализировать на предмет величины для последующих операций "сокращения входного файла".
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.072 c