Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.07.31;
Скачать: CL | DM;

Вниз

EndOfTheDay...   Найти похожие ветки 

 
istok   (2011-04-23 00:08) [0]

функция EndOfTheDay и даже самописный, более мягкий и неточный вариант в виде RecodeTime(AValue, 23, 59, 59, 0) иногда возвращают не конец переданного дня, а начало следующего...

не могу понять в чем дело, может если где-то в коде используется real а не datetime (который есть более большой тип extended) то часть мантиссы может обрезаться и день округлится до слудеющего дня??

причем этот глюк то есть, то нет.. какие-то особенности работы с плавающей запятой?


 
Anatoly Podgoretsky ©   (2011-04-23 00:10) [1]

> istok  (23.04.2011 00:08:00)  [0]

Округление


 
istok   (2011-04-23 00:29) [2]

я сам округление точно не использую, делфи что, сама иногда может округлить такое число (ессно там много девяток в мантиссе..)??


 
ов (дом)   (2011-04-23 01:19) [3]


> какие-то особенности работы с плавающей запятой?
>

вероятно, Антона Григорьева почитайте, погуглите

delphi нет под рукой, а если так примерно написать?
EndOfTheDay2(in:TDAteTime):TDAteTime;
result := TdateTime(StartOfTheDay(in) + 1 - 1/(60*60))


 
Германн ©   (2011-04-23 02:03) [4]


> EndOfTheDay... [D7]
>
> istok   (23.04.11 00:08)
>
> функция EndOfTheDay и даже самописный, более мягкий и неточный
> вариант в виде RecodeTime(AValue, 23, 59, 59, 0) иногда
> возвращают не конец переданного дня, а начало следующего.
> ..
>


Или я чего-то не понял, или кто-то из нас двоих бредит. Думаю, что всё-таки вы. :)
P.S. И не надо будить Антона Григорьева!


 
ов (дом)   (2011-04-23 12:28) [5]

оказывается, и футболист есть такой 6)
"Неочевидные особенности вещественных чисел"
вот как

> result := TdateTime(StartOfTheDay(in) + 1 - 1/(24*60*60))

т.е. от следующего дня отнять секунду


 
Ega23 ©   (2011-04-23 12:33) [6]

Result := IncMillisecond(StartOfTheDay(DateIn) + 1, -1);


 
sniknik ©   (2011-04-23 13:22) [7]

> Result := IncMillisecond(StartOfTheDay(DateIn) + 1, -1);
проверка... ;)

procedure TForm1.Button1Click(Sender: TObject);

 function Foo(DateIn: TDateTime): Single;
 begin
   result:= IncMillisecond(StartOfTheDay(DateIn) + 1, -1);
 end;

begin
 ShowMessage(DateTimeToStr(Foo(Now())));
end;


p.s. ничего не поможет, т.к. проблема вовсе не в том что стандартные функции "глючат"... а где то рядом.


 
Ega23 ©   (2011-04-23 13:28) [8]

function Foo(DateIn: TDateTime): Single;

С фига-ли Single-то? Замени на TDateTime и будет тебе щщасте


 
sniknik ©   (2011-04-23 13:32) [9]

> С фига-ли Single-то?
а фига-ли EndOfTheDay не работает? вот это пример. щщасте с TDateTime нужно не мне, а автору.


 
Ega23 ©   (2011-04-23 13:42) [10]


> а фига-ли EndOfTheDay не работает

А это "родная" функция что-ли?
Если честно - никогда не пользовался. Да и StartOfTheDay никогда не использовал, всегда Trunc писал.


 
Inovet ©   (2011-04-23 13:42) [11]

> [7] sniknik ©   (23.04.11 13:22)
> что стандартные функции "глючат"... а где то рядом.

Так известно же, что десятичное представление точно не соответсвует двоичному. И про эти функции в той или ещё в одной статье про округление было сказано.


 
Anatoly Podgoretsky ©   (2011-04-23 14:24) [12]

> Inovet  (23.04.2011 13:42:11)  [11]

А я всегда X < StartOfTheDay + 1 или Trunc(AnyDate) + 1
Никаких проблем с округлением


 
Anatoly Podgoretsky ©   (2011-04-23 14:27) [13]

Особенно на MS SQL где точность всего 3 мс


 
Ega23 ©   (2011-04-23 14:45) [14]


> Особенно на MS SQL где точность всего 3 мс

Там не просто 3 ms, там строго окончание datetime 0, 3 и 7.


 
istok   (2011-04-23 15:37) [15]


> > Особенно на MS SQL где точность всего 3 мс
>
> Там не просто 3 ms, там строго окончание datetime 0, 3 и
> 7.


именно в него потом передаю эти даты для фильтрации!! и получаю лишние данные...

так что использовать наверняка для ms sql?

и получается что вариант с RecodeTime(AValue, 23, 59, 59, 0) должен был работать?


 
Anatoly Podgoretsky ©   (2011-04-23 16:46) [16]

> istok  (23.04.2011 15:37:15)  [15]

Ты чего не читатель?
Я же написал, использовать отношение меньше и никаких ошибок


 
sniknik ©   (2011-04-23 18:15) [17]

> так что использовать наверняка для ms sql?
ms sql 2008 + расширенный тип даты (читал там есть, но т.к. не стоит/не использовал, то конкретики не знаю)  - variant в передаче значений, т.к. D7, и будет приводится к ближайшему типу с ограничениями.

> Я же написал, использовать отношение меньше и никаких ошибок
так он может не сравнивает, может само значение сохраняет с точностью "тютелька в тютельку"...


 
Anatoly Podgoretsky ©   (2011-04-23 18:29) [18]

Его партизанские замашки, то его проблема.


 
ов (дом)   (2011-04-24 00:00) [19]


> StartOfTheDay никогда не использовал, всегда Trunc писал.

я тоже, пока не нарвался на вопли о том что , дескать, хочу время, а ты мне число суешь. И довольно нечитаемо переубедить было через явное приведение.


> именно в него потом передаю эти даты для фильтрации!! и
> получаю лишние данные...

не тут собака порылась, явно
там миллисекунд, а тут целая секунда..


 
Германн ©   (2011-04-24 01:08) [20]


> не тут собака порылась, явно
> там миллисекунд, а тут целая секунда..
>

Где тут "целая секунда"?


 
ов (дом)   (2011-04-24 08:19) [21]

явно отнять одну секунду - будет одна секунда


 
sniknik ©   (2011-04-24 10:36) [22]

> и получается что вариант с RecodeTime(AValue, 23, 59, 59, 0) должен был работать?
вот тут - секунда... причем вполне рабочий вариант даже с простым временем в mssgl с его дискретностью в миллисекундах (это запишется точно), правда есть вероятность потерять значения... (их есть еще целых 3 между 59 сек и 0 следующего дня)

> не тут собака порылась, явно
она там явно порылась даже не в одном месте... кучки свои закапывала... :)



Страницы: 1 вся ветка

Текущий архив: 2011.07.31;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.009 c
15-1300890864
Kerk
2011-03-23 17:34
2011.07.31
Посоветуйте eInk -читалку


15-1302638629
Kerk
2011-04-13 00:03
2011.07.31
"Первая орбита"


15-1302553798
Юрий
2011-04-12 00:29
2011.07.31
С днем рождения ! 12 апреля 2011 вторник


15-1302474822
WondeRu without password
2011-04-11 02:33
2011.07.31
Благодарность форуму


15-1302090541
oxffff
2011-04-06 15:49
2011.07.31
AfterConstruction, beforedestruction у record