|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
Решил сделать хранение значений времени в поле с форматом 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 лет. ============================================================================================================ "О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 16:28 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
[quot dab2]Решил сделать хранение значений времени в поле с форматом Long. Т.е. 21020 означает 2 дня, 10 ч. и 20 мин. формат не предполагает хранение больше чем 9-ти полных дней? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 16:32 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
Предполагает. Можно ввести не более 214748 дней (последние 4 разряда для времени ч. и м.) Кстати, забыл ещё указать формат отображения поля: &&" сут. "@@" ч. "@@" м." ============================================================================================================ "О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 16:37 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
dab2, вы ищете себе проблемы на ровном месте - не надо так хранить диапазон - это полная ерунда. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 16:57 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
Предлагайте свой правильный вариант. Целые обрабатываются быстрее, чем календарные функции. Ведь календарь здесь не нужен. Эти значения можно прибавлять/отнимать от календарных значений. Считаю это эффективней. Лучше подскажите как с маской быть - всего и делов-то. ============================================================================================================ "О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 17:06 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
proposed amendmentdab2, вы ищете себе проблемы на ровном месте - не надо так хранить диапазон - это полная ерунда. Просьба без конкретики не захламлять тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 17:27 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
dab2Целые обрабатываются быстрее, чем календарные функции. Если придется отделять различные составляющие даты и времени, то выигрыш может обернуться проигрышем. Ведь вам придется пользоваться универсальными операциями (делением, умножением), что, скорее всего, будет уступать специализированным функциям ВБА. А кроме того, это неудобства в разработке, опять таки из-за отказа от функций. Имхо, это не лучшее решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 17:33 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
dab2proposed amendmentdab2, вы ищете себе проблемы на ровном месте - не надо так хранить диапазон - это полная ерунда. Просьба без конкретики не захламлять тему. ну ты смотри какой упрямый месяцы-дни и часы-минуты совершенно разные детерминанты - даты и времени 23-01-2008 23:00 24-01-2008 01:00 ----------------- 10100 24-01-2008 01:00 24-01-2008 14:00 ----------------- 1300 ну и что вы собираетесь тут сравнивать? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 17:41 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
если хотите конкретики - храните диапазон в минутах (если нужен другой квантор - в секундах) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 17:49 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
proposed amendmentесли хотите конкретики - храните диапазон в минутах (если нужен другой квантор - в секундах) А потом обе части переводить в эти минуты или секунды? И в конечном итоге календарная функция для "закатки" значения в поле даты/времени. авторЕсли придется отделять различные составляющие даты и времени Не придётся. Если к сегодняшней дате, например, прибавить 10 дней из поля времени со значением 102015 (10 дней, 20 ч. 15 мин.), то сделаем, скажем, так: day(date())+left$([поле], len([поле])-4) Для часов: прибавим к текущему времени время из нашего поля Hour(Time())+mid([поле], 3, 2) И т.п. Len() обрабатывается очень быстро. Я не вижу особых проблем с временем обработки. Вот если бы складывать дату с датой, то это календарные функции, т.к. отслеживаем ещё и корректность дат календаря. Как вы предлагаете хранить временные отрезки с точностью до минут? М.б. мы друг друга не поняли? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 17:58 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
диапазон в минутах \ 60 = диапазон в часах \ 24 = диапазон в сутках ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 18:04 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
proposed amendmentдиапазон в минутах \ 60 = диапазон в часах \ 24 = диапазон в сутках Согласен. Всё-таки для хранения временных отрезков (не календарных) лучше подходит целочисленное поле. По крайней мере, с точностью до минут (да и в секундах величина в long набегает на 68 лет). Просьба подсказать с маской всё-таки. Как её заставить добавлять к набранным цифрам нули самостоятельно? (См. начало темы). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 18:24 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
Я бы не сказал, что все-так безобидно. Операции Len + Left + суммирование с датой это в десятки раз дольше чем просто суммирование даты и целого числа. Второе. Что будете делать когда, при сложении времен, часы перейдут за 24, а минуты за 60? А ведь за этим постоянно придется следить. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 18:36 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
лучше сделайте на форме три поля ввода - для суток часов и минут ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2009, 18:38 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
mds_worldЯ бы не сказал, что все-так безобидно. Операции Len + Left + суммирование с датой это в десятки раз дольше чем просто суммирование даты и целого числа. Второе. Что будете делать когда, при сложении времен, часы перейдут за 24, а минуты за 60? А ведь за этим постоянно придется следить. Про Len() - длина строки хранится в начале последовательности байтов самой строки. Считывание этого числа - дело мгновения. Left() - честно скажу, не мерил :) но всё-таки целочисленное деление или умножение, конечно, очень быстрое, с этим не поспоришь. А что касается перехода часов, минут, то за этим следит параметр Условие на значение при вводе в поле на форме (см. начало). И там всё определяется, поэтому при вводе вы не ошибётесь. Что касается часового формата времени, то это решается тем же целочисленным делением "\" или умножением, про которые вы сами написали. Спасибо за дельный диалог, но всё-таки хотелось бы узнать про маску. Я думаю, что эта тема теперь многим пригодится, давайте её дополним ещё одной полезной инфой. Или делать три поля для ввода, когда можно обойтись маской? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2009, 01:46 |
|
Пример хранения значений времени
|
|||
---|---|---|---|
#18+
У меня в одном из проектов было много полей с временем. Только со временем, без даты. т.е. с 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2010, 12:01 |
|
|
start [/forum/topic.php?fid=45&msg=35868077&tid=1632148]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 153ms |
0 / 0 |