Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
2-1303392541
барсук
2011-04-21 17:29
2011.07.31
Как вывести список IP, к которым стороняя программа подключена


2-1303709793
prodex
2011-04-25 09:36
2011.07.31
Обращение к БД InterBase из разных потоков


2-1303387044
stenfit
2011-04-21 15:57
2011.07.31
Incompatible types


15-1302588303
OW
2011-04-12 10:05
2011.07.31
Задача определения региона по номеру позвонившего


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский