Перевод числа во время

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Maratka_
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 17.02.2009 (Вт) 2:41

Перевод числа во время

Сообщение Maratka_ » 09.04.2009 (Чт) 21:21

Есть некое число, скажем 7282.

Как бы из него получить 2 часа 1 минута 22 секунды, в формате что-то вроде 2:01:22

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Перевод числа во время

Сообщение Williams » 09.04.2009 (Чт) 21:23

У класса DateTime есть подобающие конструкторы.
И вы думаете, что вас оставят в живых после прочтения этого поста?

Maratka_
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 17.02.2009 (Вт) 2:41

Re: Перевод числа во время

Сообщение Maratka_ » 09.04.2009 (Чт) 22:16

Williams писал(а):У класса DateTime есть подобающие конструкторы.


А чуток поподробнее можно? ;)
Вот такая штука работать не хочет...


Код: Выделить всё
a = VB.Timer() 'включаем отсчет

        Do While Me.Width <> 703
            date_ = System.DateTime.Now 'берем текущую дату
            Thread.Sleep(1000)

            If System.DateTime.Now.ToString <> date_ Then 'если даты не совпали, значит точно прошла минимум секунда
                date_2 = Int(VB.Timer - a) 'получаем кол-во секунд с момента начала отсчета
                MsgBox(DateTime.FromBinary(date_2)) ' а вот тут что-то не работает, постоянно возрвращает 0:00:00
            End If
        Loop


MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Перевод числа во время

Сообщение MIT » 09.04.2009 (Чт) 22:38

Williams писал(а):У класса DateTime есть подобающие конструкторы.

Там вроде только из виндовремени и из UTC можно сделать. Разве нет?

Добвалено: самый простой способ - свой парсерчег написать, сложного тут ничего нет :)
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Перевод числа во время

Сообщение Williams » 09.04.2009 (Чт) 22:41

И вы думаете, что вас оставят в живых после прочтения этого поста?

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Перевод числа во время

Сообщение MIT » 09.04.2009 (Чт) 22:47

Что-то я там ничего подходящего не увидел :?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Перевод числа во время

Сообщение Nord777 » 09.04.2009 (Чт) 23:21

Maratka_ поясни своими словами чего хочешь. Пример не понял.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Maratka_
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 17.02.2009 (Вт) 2:41

Re: Перевод числа во время

Сообщение Maratka_ » 09.04.2009 (Чт) 23:36

Nord777 писал(а):Maratka_ поясни своими словами чего хочешь. Пример не понял.


В общем ничего сложного...

все оформленно как цикл^
Do While

Loop

Внутри цикла тикает таймер с начала некого события, который я включаю при наступлени этого события (a = VB.Timer())
На любой момент времени я могу посмотреть, сколько прошло секунд с начала отсчета (Int(VB.Timer - a)), т.е. от текущего значения отнимаю то, что было на момент наступления собятия - и получаю кол-во прошедших секунд.

Секуды четко показываются, и к ним вопросов нет.
Но читать текст "с момента нажатия кнопки такой-то прошло 7271 секунды" неудобно, непривычно, да и просто неправильно :(

Гораздо приятнее перевести это в часы/минуты/секунды и получить что-то вроде 0 дней 2 часа 1 минута 11 секунд, в формате типа 0:02:01:11
И вот с этим вопрос.... :(

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Перевод числа во время

Сообщение iGrok » 09.04.2009 (Чт) 23:39

Nord777 писал(а):Maratka_ поясни своими словами чего хочешь. Пример не понял.


Код: Выделить всё
2:01:22 = 2 * 3600 + 1 * 60 * 22 = 7200 + 60 + 22 = 7282

7282 \ 3600 = 2 = h
7282 - h * 3600 = 7282 - 2 * 3600 = 82
82 \ 60 = 1 = m
82 - m * 60 = 82 - 1 * 60 = 22 = s


Вот чего он хочет. Только автоматом.

Или так. Пусть s - твои секунды. Тогда:
Код: Выделить всё
h = s \ 3600
s = s - h * 3600
m = s \ 60
s = s - s * 60
Последний раз редактировалось iGrok 09.04.2009 (Чт) 23:50, всего редактировалось 2 раз(а).
label:
cli
jmp label

Maratka_
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 17.02.2009 (Вт) 2:41

Re: Перевод числа во время

Сообщение Maratka_ » 09.04.2009 (Чт) 23:44

iGrok писал(а):
Nord777 писал(а):Maratka_ поясни своими словами чего хочешь. Пример не понял.


2:01:22 = 2 * 3600 + 1 * 60 * 22 = 7200 + 60 + 22 = 7282

7282 \ 3600 = 2 = h
7282 - h * 3600 = 7282 - 2 * 3600 = 82
82 \ 60 = 1 = m
82 - m * 60 = 82 - 1 * 60 = 22 = s

Вот чего она хочет. Только автоматом.


Совершенно верно.
Только писать функцию самому опять же неправильно - ибо уверен что уже MS ее написала за меня, и 10 миллионов других пользователей :)

p.s.
я мужчина ;)

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Перевод числа во время

Сообщение Nord777 » 09.04.2009 (Чт) 23:46

2:01:22 = 2 * 3600 + 1 * 60 * 22 = 7200 + 60 + 22 = 7282
Я про третье сообщение. Там какая то жуткая каша. :)
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Maratka_
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 17.02.2009 (Вт) 2:41

Re: Перевод числа во время

Сообщение Maratka_ » 09.04.2009 (Чт) 23:50

Nord777 писал(а):
2:01:22 = 2 * 3600 + 1 * 60 * 22 = 7200 + 60 + 22 = 7282
Я про третье сообщение. Там какая то жуткая каша. :)


Ну так потому и пришел сюда, чтобы поучиться :)
Так что по теме вопроса? ;)

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Перевод числа во время

Сообщение iGrok » 09.04.2009 (Чт) 23:52

Maratka_ писал(а):p.s.
я мужчина ;)

Блин. Сорри. :oops:

Кажется, твой ник меня уже второй раз с толку сбивает. :oops:
label:
cli
jmp label

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Перевод числа во время

Сообщение Nord777 » 09.04.2009 (Чт) 23:53

Своими словами. Чего хочешь получить от этого кода?

PS: TimeSpan.FromSeconds(7282).ToString
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Maratka_
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 17.02.2009 (Вт) 2:41

Re: Перевод числа во время

Сообщение Maratka_ » 10.04.2009 (Пт) 0:00

Nord777 писал(а):Своими словами. Чего хочешь получить от этого кода?

PS: TimeSpan.FromSeconds(7282).ToString


Спасибо, работает!!!!

Нужно было знать сколько времени запущена программа, когда в первый (или последний) раз нажималась такая-то кнопка, программа разворачивалось (сворачивалась) в трей и всякая другая подобная чупуха.... нужно для статистики использования программки.

Соответственно, фрагмент теперь выгдядет так:

Код: Выделить всё
   a = VB.Timer() 'включаем отсчет
        Do While Me.Width <> 703

            date_ = System.DateTime.Now 'берем текущую дату
            Thread.Sleep(1000) 'усыпляем поток на одну секунду

            If System.DateTime.Now.ToString <> date_ Then 'если даты не совпали, значит точно прошла минимум секунда
                date_2 = Int(VB.Timer - a) 'получаем кол-во секунд с момента начала отсчета
                Label54.Text = (TimeSpan.FromSeconds(date_2).ToString)
            End If
        Loop

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Перевод числа во время

Сообщение Nord777 » 10.04.2009 (Пт) 0:17

Откуда ты вызываешь этот код?
Что тут делает эта строка Do While Me.Width <> 703
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Maratka_
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 17.02.2009 (Вт) 2:41

Re: Перевод числа во время

Сообщение Maratka_ » 10.04.2009 (Пт) 0:27

Nord777 писал(а):Откуда ты вызываешь этот код?
Что тут делает эта строка Do While Me.Width <> 703


Это отдельный поток.
Do While Me.Width <> 703 - размер моей формы, он к делу отношения не имеет. Просто при закрыти проги я меняю ее размеры, и все потоки умирают.
Криво, зато прикольно - лишнюю переменную вышло съекономить на флаге "завершение работы программы" ;)

Еще вопрос можно?
Функция дала мне время работы программы в часах/минутах/секундах, типа 00:12:22
Что будет, когда мы дойдем до 23:59:59?
Как бы увидеть, что пошли вторые сутки?

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Перевод числа во время

Сообщение Nord777 » 10.04.2009 (Пт) 0:36

Что будет, когда мы дойдем до 23:59:59?
00:00:00
Как бы увидеть, что пошли вторые сутки?
TimeSpan.Days

Это твой код, только в стиле .Net
Код: Выделить всё
      Dim date1 As Date, TS As TimeSpan

      Do While Me.Width < 703
         date1 = Now
         Thread.Sleep(1000)

         TS = Now - date1
         If TS.Seconds >= 1 Then Label1.Text = TS.ToString
      Loop
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Перевод числа во время

Сообщение Williams » 10.04.2009 (Пт) 10:33

TimeSpan и DateTime похожие, но принципиально разные вещи.
Первый представляет интервал времени. Второй - дату. Кстати по-теме - TimeSpan не имеет форматированного ToString, но можно сделать DateTime.MinValue.Add (timeSpan).ToString("Формат")
И вы думаете, что вас оставят в живых после прочтения этого поста?


Вернуться в Visual Basic .NET

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

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

    TopList