|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
07.11.2008, 16:20 | #1 |
Форумчанин
Регистрация: 17.10.2008
Сообщений: 239
|
Преобразование формата дата время в VBA
Уважаемые господа!
Получая данные с внешнего источника VBA имею дату в стандартном формате времени - "dd.mm.yy hh:mm:ss". Для проведения вычислений необходимо преобразовывать ее в формат число представляющий время в экселе (0 ... 0,999988426), а затем преобазовывать в формат времени. Вопрос какой функцией в макросе производить такие преобразования? |
09.11.2008, 14:24 | #2 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
допустим dt - это то, что получено с внешнего источника, тогда
d = Int(dt) - это дата t = dt - d - это время MsgBox "dt = " & dt & " t = " & Format(t, "hh:mm:ss") - это можно посмотреть результаты присваивания
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
10.11.2008, 05:15 | #3 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
В VBA для решения данной задачи есть специальная функция.
Допустим, dt - это то, что получено с внешнего источника, тогда: Код:
Чем шире угол зрения, тем он тупее.
|
10.11.2008, 09:33 | #4 |
Форумчанин
Регистрация: 17.10.2008
Сообщений: 239
|
[QUOTE=IgorGO;155323]допустим dt - это то, что получено с внешнего источника, тогда
d = Int(dt) - это дата t = dt - d - это время MsgBox "dt = " & dt & " t = " & Format(t, "hh:mm:ss") - это можно посмотреть результаты присваивания[/QUOTE Уважаемый IgorGO Я понял это так dt представленно в формате "dd.mm.yy hh:mm:ss" и я автоматически получаю t в нужном формате, т.е. t - будет находиться в промежутке от 0 до 0,99... Или это не совсем так? Вся гадость заключается в необходимости проведения расчетов скорость измениения процесса, т.е. деление на дельту времени. В лыюое время даже при переходе чеез сутки. а полученную дельту переводить обратно в параметр время. Кстати ответ обратного преобразования я от Вас получил - огромное спасибо. |
10.11.2008, 09:39 | #5 |
Форумчанин
Регистрация: 17.10.2008
Сообщений: 239
|
А это фунция точно преобразует формат времени Или придеться писать свою функцию для преобразования форматов?
|
10.11.2008, 10:07 | #6 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Если переменная dt представлена в формате дата/время (как Вы и оговаривали), то функция вернет значение в формате время (без даты).
Чем шире угол зрения, тем он тупее.
|
10.11.2008, 10:12 | #7 |
Форумчанин
Регистрация: 17.10.2008
Сообщений: 239
|
Для облегчения посылаю часть кода как я делаю сейчас
Dim tp1,tp2,td1,td2, result, th,tm,ts as long ... dim oRes as ADoDB.recordset ... oRes.Open Conn ... do while NOT eos.oRes th= HOUR(oRes.filed(0)).value tm =MINUTE(oRes.Field(0)).value ts = second(oRes.Field(0)).value tp1=1/(th*3600+tm*60+ts) td1 = oRes.field(1).value oRes.Movenext th= HOUR(oRes.filed(0)).value tm =MINUTE(oRes.Field(0)).value ts = second(oRes.Field(0)).value tp2=1/(th*3600+tm*60+ts) td2 = oRes.field(1).value result=(td2-td1)/(tp2-tp1) oRes.Movenext .... далее обработка результата loop вопрос. можно существует ли функция преобразования даты - времени вместо той которую я написал: th= HOUR(oRes.filed(0)).value tm =MINUTE(oRes.Field(0)).value ts = second(oRes.Field(0)).value tp1=1/(th*3600+tm*60+ts) она у меня не работает при переходе дня естесстно |
10.11.2008, 11:06 | #8 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
1. Если Вам нужно получить абсолютное значение времени в секундах, то лучше воспользоваться другой функцией. Например, пусть oRes.Field(0) = 10.03.08 2:30:15. Тогда выделить время и получить его значение в секундах можно так:
Код:
2. Если нужно получить разность между двумя переменными, представленными в формате дата/время, то, соответственно: Код:
Чем шире угол зрения, тем он тупее.
|
10.11.2008, 11:25 | #9 |
Форумчанин
Регистрация: 17.10.2008
Сообщений: 239
|
SAS888 Огромное спосибо. А то я всю голову сломал как мне получать разницу. Ваше предложение просто замечательное. Обязательно воспользуюсь поlсказкой. Только остаестя вопрос как мне инициализировать переменную dt1 и dt2. Если я правильно понял то
dim dt1, dt2 as date будет представляться в формате дата+время? |
10.11.2008, 11:36 | #10 | |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Цитата:
Код:
Чем шире угол зрения, тем он тупее.
Последний раз редактировалось SAS888; 10.11.2008 в 11:42. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Дата и время | v-anatolik-s | Microsoft Office Excel | 3 | 14.10.2008 07:45 |
Дата и время + секунда | serjo | Помощь студентам | 5 | 24.01.2008 00:21 |
время и дата на winapi | deadh5n1 | Помощь студентам | 3 | 14.12.2007 15:35 |
Преобразование строки во время | kayman | Общие вопросы Delphi | 7 | 02.10.2007 15:41 |