Формат хранения даты-времени в VB6

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Формат хранения даты-времени в VB6

Сообщение ger_kar » 08.05.2014 (Чт) 7:51

Хотелось бы узнать как все-таки храниться дата и время в переменной типа Date в VB6.
Перерыл интернет, но относительно формата хранения такого типа в Visual Basic 6 полная тишина.
Например, то что написано для MS SQL Server, а именно :
Выдержка из русскоязычного BOL:

Значения типа datetime хранятся в виде 4-байтовых целых чисел. Первые четыре байта содержат количество дней до или после даты отсчета: 1 января 1900 года. Дата отсчета является системной датой. Вторые четыре байта содержат текущее значение времени, представленного в виде трехсотых долей секунды, прошедших после полуночи.


Для VB6 не совсем подходит. Ибо при занулении тех 4 байт, отвечающих за время, время изменяется, но не обнуляется.
Для того, чтобы округлить значение даты/времени до одной даты (занулить время) приходится использовать такую конструкцию:
= DateAdd("d", DateDiff("d", 0, DT), 0), где DT - это округляемое значение.
Такой подход достаточно громоздкий и не очень хорош с точки зрения лени :). Но при знании устройства этого формата, тоже самое можно было - бы получить используя булеву операцию с маской.
Бороться и искать, найти и перепрятать

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Формат хранения даты-времени в VB6

Сообщение Mikle » 08.05.2014 (Чт) 8:24

Date - это обычный Double, время в сутках, прошедших с 30 декабря 1899 г. Там, вроде как, учли поправку календаря, поэтому такое число.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.05.2014 (Чт) 12:31

ger_kar писал(а):Но при знании устройства этого формата, тоже самое можно было - бы получить используя булеву операцию с маской.

Зачем так сложно? Вроде бы вот так можно:
Код: Выделить всё
Dim D As Date
' ...
D = Int(D)


Mikle писал(а):Date - это обычный Double

Точно Double? Я почему-то считал, что там fixed point.
Хотя, возможно путаю с Currency (там-то точно fixed point).

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Формат хранения даты-времени в VB6

Сообщение ger_kar » 08.05.2014 (Чт) 13:08

Mikle писал(а):Date - это обычный Double, время в сутках, прошедших с 30 декабря 1899 г. Там, вроде как, учли поправку календаря, поэтому такое число.
Ну оно же кроме даты еще и время содержит. Тогда, если представить дату в виде значения Double получается что дата - это целая часть, а дробная - это соответственно время.

Qwertiy писал(а):Зачем так сложно? Вроде бы вот так можно:

Код: Выделить всё
Dim D As Date
' ...
D = Int(D)

Вот же блин... :shock:
Спасибо, все оказалось предельно просто. И как я сам до этого не допер :)
Теперь буду юзать этот способ.

Qwertiy писал(а):Точно Double? Я почему-то считал, что там fixed point.

Если честно, то я не очень понимаю как устроен сам тип Double, но если принять во внимание что этот тип плавающий, тогда становится понятным, что сама целая часть тоже не постоянного размера. И видимо по этому я не мог однозначно определить эту границу, так как она плавающая.
Надо теперь посмотреть как устроен Double.
Надо было давно такую тему создать, а то применял всякую фигню :)
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Формат хранения даты-времени в VB6

Сообщение ger_kar » 08.05.2014 (Чт) 16:21

Попробовал применить конструкцию с Int применительно к SQL запросам к базе данных MS JET4.0 (Access) из VB6 и оказалось, что она и там вполне себе работоспособна, что есть большой гут :)
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Формат хранения даты-времени в VB6

Сообщение Хакер » 09.05.2014 (Пт) 13:18

ger_kar писал(а):что сама целая часть тоже не постоянного размера.

Целой части нет вообще.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 54

    TopList