marvel
Дата: 03.06.2004 08:52:51
Что за фигня
Int=270
Tim.Text = DateAdd("n", Int, Time)
Если при сложении время переваливает через полночь то пишется: (31.12.1899 1:22:19). Откуда тут дата?
Alexander G
Дата: 03.06.2004 09:10:19
Получился 1 день. Положительное число.
В типе данных Date (сохраняется как 64-разрядное (8-байтовое) число с плавающей точкой, целая часть - дни)- 0 это 30 декабря 1899, вот он и прибавил.
Rivkin Dmitry
Дата: 03.06.2004 09:34:40
Дело в том, что время (в смысле тольеко часы, мин и сек) это частный случай типа Date и хранится оно в компе как дробная часть дня, т.е. 1 - это один день, а 1 час это 1/24, соответственно мин = 1/24/60 и т.д. В Акцесе за нулевую дату принят
format(CDate(0),"dd/mm/yyyy hh:nn:ss") = 30/12/1899 00:00:00
Значит, сегодня:
cdbl(Now) = 38141.3476851852
Время записывается в поле даты как нуль дней + часы, например, 08:20 = 30/12/1899 00:08:20, соответсвенно, добавление нескольеих часов, переходящих через сутки, увеличит количество дней на 1 и превратит время в дату, например,
?DateAdd("h", 20, Time) = 31/12/1899 04:25:48 AM, а Акцес такой формат уже распознает, как дату, а не как время!
Поэтому, занимаясь вычислениями времени (в смысле тольеко часы, мин и сек) нужно проставлять полный формат даты, а именно:
DateAdd("h", 20, Now) = 04/06/2004 04:32:44 AM
Тогда все понятно и нет вопросов.
Кстати, в MS SQL Server за нулевую дату принято другое число
select cast(0 as datetime) = 1900-01-01 00:00:00.000
и это может приводить к ошибкам вычисления даты, которая из бейсика и акцеса записывается в таблицы в серевера в своем формате.