Перевод строки в значение времени

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Перевод строки в значение времени

Сообщение Viper » 24.01.2007 (Ср) 15:39

Что-то торможу после ударного труда :(
Имеется строка, вида

Код: Выделить всё
00:15:12.0156


содержащая время. После точки доли - секунды. Как и чем это преобразовать в тип Date. Проблема в том как (вернее чем) доли секунды запихать в Date.
Весь мир матрица, а мы в нем потоки байтов!

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 24.01.2007 (Ср) 16:26

а в чем проблема-то? миллисекунды отбрасывай, нафиг они нужны:

Код: Выделить всё
Dim f As Date
Dim z As String
z = "00:15:12.0156"
f = Mid$(z, 1, InStr(1, z, ".", vbBinaryCompare) - 1)
MsgBox f

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 24.01.2007 (Ср) 16:30

Боюсь что никак не пихнуть доли в Date-тип, т.к. там жестко определено что-куда, и для долей места нет... Ну чем string-то плохо?
Ну на крайняк, может легче все время перевести в доли секунды и в long\double сохранить да радоваться....
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 24.01.2007 (Ср) 17:28

jangle писал(а):а в чем проблема-то? миллисекунды отбрасывай, нафиг они нужны:


Вот как раз тот случай, когда они нужны... :(

Wolfie, вроде хранит Date доли секунды? Или ошибаюсь?
Весь мир матрица, а мы в нем потоки байтов!

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 24.01.2007 (Ср) 18:17

Ну я имхо говорил по личному опыту, MSDN смотреть надо...
но мне не удалось ей присвоить это дело никакими способами - более того, доли секунды можно-ли получить через time? а Date вроде чисто как Date и Time функции сделан, если я ошибаюсь - поправьте. Но се же, не проще ли хранить в лонге? Ведь там, где речь идет о долях секунды, думаю о часах и сутках речи не будет?
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.01.2007 (Ср) 18:33

Хранит.
Date -- это тот же Double, по единице на день.
Направление ясно?
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 24.01.2007 (Ср) 18:54

Схранил все в Long. Возиться с Double/Date времени нет... хотя на будущее можно будет и повозиться с этим вполне извесным фактом, что Date есть Double
Весь мир матрица, а мы в нем потоки байтов!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.01.2007 (Ср) 19:07

В каком виде сохранил в Long? Как число миллисекунд?
Тогда подели на 86400000, получится Date ;-)
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 24.01.2007 (Ср) 19:11

Нды... и действительно... Все как всегда просто и рядом....
Весь мир матрица, а мы в нем потоки байтов!

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 24.01.2007 (Ср) 20:20

tyomitch круто ))) так как все же тогда сохранять в date
милисекунды и заодно, можно ли их без всяких заморочек и АПИ получить? и если их дает time, то как их вывести через format$?

кстати - в милисекундах не 4 знака, а 3. ведь 1\1000 это 0.001
а то .0156 уже 156\10000 получается?
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.01.2007 (Ср) 21:02

Wolfie, задача для третьеклассника: если число миллисекунд переводится в Date делением на 86400000, тогда как из Date получить число миллисекунд? :-)
Изображение

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 24.01.2007 (Ср) 23:00

Да нет же, функция Date и ей аналогичная Time ставят ТЕКУЩЕЕ состояние даты и времени.
Допустим я пишу Log-File и хочу проставлять туда не просто hh:nn:ss но и милисекунды - возможно ли это? Вот о чем я спрашиваю, насчет перевода и так понятно
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.01.2007 (Ср) 23:05

GetLocalTime
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 25.01.2007 (Чт) 13:49

Wolfie писал(а):Да нет же, функция Date и ей аналогичная Time ставят ТЕКУЩЕЕ состояние даты и времени.
Допустим я пишу Log-File и хочу проставлять туда не просто hh:nn:ss но и милисекунды - возможно ли это? Вот о чем я спрашиваю, насчет перевода и так понятно


Вот набросал на скорую руку примерчик в Date помещаем время с тысячными и потом выводим полученный результат в строку. Работает кажись правильно, но может еще можно упростить - лень уже. Может желающие смогут...

Код: Выделить всё
Public Sub Main()
    Dim d As Date, dd As Date, ct As Date, f As Double, i As Integer
   
    ct = Now
    Debug.Print ct
    For i = 0 To 999 Step 7
        ' В dd сохраним дату с тысячными секунды
        dd = ct + i / 1000 / 86400
       
        ' Выводем полученную дату...
        Debug.Print FormatTTT(dd), i
    Next i
    Debug.Print ct
End Sub

' Возвращает строку дата/время с тысячными секунды
Private Function FormatTTT(dd As Date) As String
    Dim d As Date, f As Double

    d = dd - Int(dd)
    f = 86400 * d
    f = f - Int(f)
    d = Int(dd) + (d - f / 86400)
    FormatTTT = Format$(d, "General Date") & "." & Right$(Format$(1000 * f, "000"), 3)
End Function
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.01.2007 (Чт) 18:03

В Now нету тысячных секунды. Там уже округлено до секунд.
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 25.01.2007 (Чт) 20:32

tyomitch писал(а):В Now нету тысячных секунды. Там уже округлено до секунд.


Если внимательней посмотришь, то тысячные секунды я сам прибавляю и потом вывожу.

Главное что Date/Double хватило...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.01.2007 (Чт) 20:42

Wolfie писал(а):Да нет же, функция Date и ей аналогичная Time ставят ТЕКУЩЕЕ состояние даты и времени.
Допустим я пишу Log-File и хочу проставлять туда не просто hh:nn:ss но и милисекунды - возможно ли это? Вот о чем я спрашиваю, насчет перевода и так понятно
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 25.01.2007 (Чт) 20:59

Ваще примитив:

Код: Выделить всё
Public Sub Main()
    Dim i As Integer, d As Date
   
    For i = 0 To 100
        d = Date + Timer / 86400 '  Вот оно!
        Debug.Print FormatTTT(d), i
    Next i
End Sub

Private Function FormatTTT(dd As Date) As String
    Dim d As Date, f As Double

    d = dd - Int(dd)
    f = 86400 * d
    f = f - Int(f)
    d = Int(dd) + (d - f / 86400)
    FormatTTT = Format$(d, "General Date") & "." & Right$(Format$(1000 * f, "000"), 3)
End Function
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.01.2007 (Чт) 23:30

Я обычно Timer-Fix(Timer) использовал, помоему это проще.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 25.01.2007 (Чт) 23:47

alibek писал(а):Я обычно Timer-Fix(Timer) использовал, помоему это проще.


Я же написал чтобы с датой было.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.01.2007 (Пт) 8:19

Now()+Timer-Fix(Timer).
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 26.01.2007 (Пт) 9:12

alibek писал(а):Now()+Timer-Fix(Timer).


Зацени результат:

Код: Выделить всё
?Now()+Timer-Fix(Timer), Date + Timer / 86400
27.01.2007 2:04:23          26.01.2007 9:11:54
27.01.2007 5:32:27          26.01.2007 9:11:51
26.01.2007 12:39:49         26.01.2007 9:11:42
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.01.2007 (Пт) 10:53

(посыпаю волосы пеплом)
Format$(Now(),"dd.mm.yyyy hh:nn:ss") & Mid$(Format$(Timer-Fix(Timer),"0.000"),2)
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 26.01.2007 (Пт) 11:08

Ближе к истине.
Но обычно перед тысячными ставят точку, а не запятую, да и бывает полезно иметь значение в переменной Date для обработки...
:lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.01.2007 (Пт) 17:24

Andrey Fedorov писал(а):
alibek писал(а):Now()+Timer-Fix(Timer).


Зацени результат:

Код: Выделить всё
?Now()+Timer-Fix(Timer), Date + Timer / 86400
27.01.2007 2:04:23          26.01.2007 9:11:54
27.01.2007 5:32:27          26.01.2007 9:11:51
26.01.2007 12:39:49         26.01.2007 9:11:42

Код: Выделить всё
? Now+(Timer-Fix(Timer)) / 86400, Date + Timer / 86400
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 26.01.2007 (Пт) 17:35

tyomitch писал(а):
Код: Выделить всё
? Now+(Timer-Fix(Timer)) / 86400, Date + Timer / 86400


Ну и я говорю - где проще - слева или справа?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.01.2007 (Пт) 17:37

Да я не спорю. Просто я довёл идею alibek-а до работоспособного состояния :-)
(У меня ведь намного проще, чем в его окончательном варианте?)
Изображение

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 26.01.2007 (Пт) 20:40

Спсаибо, Господа )
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 101

    TopList