powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Пример хранения значений времени
17 сообщений из 17, страница 1 из 1
Пример хранения значений времени
    #35868062
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил сделать хранение значений времени в поле с форматом Long. Т.е. 21020 означает 2 дня, 10 ч. и 20 мин. Всё вроде бы прекрасно, условие на значение поля в форме Like "*[0-2][0-3][0-5]#" Or Is Null Or 0 даёт корректный ввод времени.
Вопрос с маской поля ввода: 99" сут. "99" ч. "99" м.";0;0 заставляет вводить все числа с клавиатуры. Как сделать такую маску, чтобы оставшиеся нули вводились сами? Например, я ввожу 01 день, а время 00ч00м должно дополняться само.

Кстати, потратил на это два дня работы, поэтому решил поделиться этим примером. В данном случе можно хранить отрезки времени с точностью до минуты: 100 суток-1 сек (если использовать только два разряда на дни) :) . Хотя если использовать всю длину long, то это больше 588 лет.
============================================================================================================
"О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако).
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868077
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot dab2]Решил сделать хранение значений времени в поле с форматом Long. Т.е. 21020 означает 2 дня, 10 ч. и 20 мин.

формат не предполагает хранение больше чем 9-ти полных дней?
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868107
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предполагает. Можно ввести не более 214748 дней (последние 4 разряда для времени ч. и м.)
Кстати, забыл ещё указать формат отображения поля: &&" сут. "@@" ч. "@@" м."
============================================================================================================
"О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако).
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868192
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2,

вы ищете себе проблемы на ровном месте - не надо так хранить диапазон - это полная ерунда.
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868234
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагайте свой правильный вариант. Целые обрабатываются быстрее, чем календарные функции. Ведь календарь здесь не нужен. Эти значения можно прибавлять/отнимать от календарных значений. Считаю это эффективней. Лучше подскажите как с маской быть - всего и делов-то.
============================================================================================================
"О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако).
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868291
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
proposed amendmentdab2,
вы ищете себе проблемы на ровном месте - не надо так хранить диапазон - это полная ерунда.
Просьба без конкретики не захламлять тему.
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868319
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2Целые обрабатываются быстрее, чем календарные функции.
Если придется отделять различные составляющие даты и времени, то выигрыш может обернуться проигрышем. Ведь вам придется пользоваться универсальными операциями (делением, умножением), что, скорее всего, будет уступать специализированным функциям ВБА. А кроме того, это неудобства в разработке, опять таки из-за отказа от функций.
Имхо, это не лучшее решение.
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868343
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2proposed amendmentdab2,
вы ищете себе проблемы на ровном месте - не надо так хранить диапазон - это полная ерунда.
Просьба без конкретики не захламлять тему.

ну ты смотри какой упрямый

месяцы-дни и часы-минуты совершенно разные детерминанты - даты и времени

23-01-2008 23:00
24-01-2008 01:00
-----------------
10100

24-01-2008 01:00
24-01-2008 14:00
-----------------
1300

ну и что вы собираетесь тут сравнивать?
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868367
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если хотите конкретики - храните диапазон в минутах (если нужен другой квантор - в секундах)
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868399
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
proposed amendmentесли хотите конкретики - храните диапазон в минутах (если нужен другой квантор - в секундах)
А потом обе части переводить в эти минуты или секунды? И в конечном итоге календарная функция для "закатки" значения в поле даты/времени.

авторЕсли придется отделять различные составляющие даты и времени
Не придётся. Если к сегодняшней дате, например, прибавить 10 дней из поля времени со значением 102015 (10 дней, 20 ч. 15 мин.), то сделаем, скажем, так:
day(date())+left$([поле], len([поле])-4)
Для часов: прибавим к текущему времени время из нашего поля
Hour(Time())+mid([поле], 3, 2)

И т.п.
Len() обрабатывается очень быстро. Я не вижу особых проблем с временем обработки. Вот если бы складывать дату с датой, то это календарные функции, т.к. отслеживаем ещё и корректность дат календаря.
Как вы предлагаете хранить временные отрезки с точностью до минут? М.б. мы друг друга не поняли?
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868428
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
диапазон в минутах \ 60 = диапазон в часах \ 24 = диапазон в сутках
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868488
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
proposed amendmentдиапазон в минутах \ 60 = диапазон в часах \ 24 = диапазон в сутках
Согласен. Всё-таки для хранения временных отрезков (не календарных) лучше подходит целочисленное поле. По крайней мере, с точностью до минут (да и в секундах величина в long набегает на 68 лет).

Просьба подсказать с маской всё-таки. Как её заставить добавлять к набранным цифрам нули самостоятельно? (См. начало темы).
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868511
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы не сказал, что все-так безобидно. Операции Len + Left + суммирование с датой это в десятки раз дольше чем просто суммирование даты и целого числа.

Второе. Что будете делать когда, при сложении времен, часы перейдут за 24, а минуты за 60? А ведь за этим постоянно придется следить.
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868517
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше сделайте на форме три поля ввода - для суток часов и минут
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #35868927
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mds_worldЯ бы не сказал, что все-так безобидно. Операции Len + Left + суммирование с датой это в десятки раз дольше чем просто суммирование даты и целого числа.

Второе. Что будете делать когда, при сложении времен, часы перейдут за 24, а минуты за 60? А ведь за этим постоянно придется следить.

Про Len() - длина строки хранится в начале последовательности байтов самой строки. Считывание этого числа - дело мгновения. Left() - честно скажу, не мерил :) но всё-таки целочисленное деление или умножение, конечно, очень быстрое, с этим не поспоришь. А что касается перехода часов, минут, то за этим следит параметр Условие на значение при вводе в поле на форме (см. начало). И там всё определяется, поэтому при вводе вы не ошибётесь.
Что касается часового формата времени, то это решается тем же целочисленным делением "\" или умножением, про которые вы сами написали.

Спасибо за дельный диалог, но всё-таки хотелось бы узнать про маску. Я думаю, что эта тема теперь многим пригодится, давайте её дополним ещё одной полезной инфой. Или делать три поля для ввода, когда можно обойтись маской?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Пример хранения значений времени
    #36622795
Фотография Tigrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в одном из проектов было много полей с временем. Только со временем, без даты.
т.е. с 00:00 до 23:59.
Если тип данных ставить ДатаВремя, то
1) в Access 2007 постоянно пристраивается стандартный datapicker, но вводить надо не дату, а только время.
2) Вводить время надо быстро, а постоянно вместо : выскакивает ^ в английской раскладке
или вместо другой клавиши : выскакивает Ж в русской раскладке.
3) В некоторых в полях фигурирует 1-1-1900 и время, а в некоторых пользователи вводят текущее время с текущей датой, что нарушает порядок сортировки в отчетах. Пользователи видят в отчетах только время, а сортировка происходит по всему полю ДатаВремя по дате, которую пользователи не видят.

Чтобы избавиться от этого - храню время в MSSQL в типе данных Smallint (с ограничениями на значение от 0 до 2359, и последние две цифры от 0 до 59 включительно).
Маска ввода стоит 00\:00
Пользователи вводят любые значения 0 = 0:00, 933 = 9:33, 1334 = 13:34, 2345 = 23:45
Напомню, в проекте вычислений никаких со временем нет.
Если вычисления будут - то конвертирую smallint в datetime с помощью дополнительного вычисляемого поля.

Чтобы хранить [колво дней][колво часов][колво минут], но не использовать стандартный тип datetime и по умолчанию dab2ввожу 01 день, а время 00ч00м должно дополняться само надо хранить данные в money (T-SQL) или Currency (Jet-SQL) с маской ввода 0.00\:00
...
Рейтинг: 0 / 0
Пример хранения значений времени
    #36622800
Фотография Tigrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тестовый скрипт для MSSQL прилагаю
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Пример хранения значений времени
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]