Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.084 c
3-1237989734
Евгений Р.
2009-03-25 17:02
2010.08.27
Закрытие БД


15-1269198653
windaws
2010-03-21 22:10
2010.08.27
Разработка АИС на Delphi


3-1240229501
Wood
2009-04-20 16:11
2010.08.27
Помогите с приложение для работы через ADO с бд.


15-1273091405
Юрий
2010-05-06 00:30
2010.08.27
С днем рождения ! 6 мая 2010 четверг


2-1273589073
Евгений Р.
2010-05-11 18:44
2010.08.27
Работа с tTollButton





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский