Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Секунды во время (string) / 6 сообщений из 6, страница 1 из 1
12.02.2009, 21:19
    #35814664
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секунды во время (string)
Всем привет!
Сегодня столкнулся с тем? что необходимо сделать такую конвертацию, и под рукой ничего не было. Вот, написал, может кому-то пригодиться:

1. Создаем метод формы - sectotime
2. Вписываем в него следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
LPARAMETERS x
*!* x - тип integer
LOCAL hh,mm,ss as Integer 
LOCAL ch,cm,cs as String 

hh = INT(x/ 3600 )
mm = INT(x/ 60  -(hh* 60 ))
ss = MOD(x, 60 )

ch= IIF(hh <  10 , "0" + ALLTRIM(STR(hh)), ALLTRIM(STR(hh)))
cm= IIF(mm <  10 , "0" + ALLTRIM(STR(mm)), ALLTRIM(STR(mm)))
cs= IIF(ss <  10 , "0" + ALLTRIM(STR(ss)), ALLTRIM(STR(ss)))

mes = ch+":" + cm + ":" + cs
RETURN mes
3. Пример вызова:
Код: plaintext
1.
2.
SELECT thisform.sectotime(SUM(my_sec)), gr 
FROM table_1 
GROUP BY pr
...
Рейтинг: 0 / 0
12.02.2009, 21:39
    #35814687
Секунды во время (string)
Imperous,

Код: plaintext
1.
2.
ch= Transform(hh,'@L 99')
cm= Transform(mm,'@L 99')
cs= Transform(ss,'@L 99')
...
Рейтинг: 0 / 0
12.02.2009, 21:42
    #35814697
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секунды во время (string)
тоже вариант :)
...
Рейтинг: 0 / 0
13.02.2009, 00:32
    #35814865
Samvel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секунды во время (string)
проходящий.Imperous,

Код: plaintext
1.
ch= Transform(hh,'@L 99')

hh может быть трехзначным и более, так что 99 не правильно
...
Рейтинг: 0 / 0
13.02.2009, 11:28
    #35815463
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секунды во время (string)
Для справки:

Если к переменной типа DateTime прибавить целое число, то это будет интерпретировано, как прибавление указанного количества секунд.

Тогда все решается проще:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
LPARAMETERS x
*!* x - тип integer

* Формируем значение переменной DateTime с "нулевым" времен
* Использовать пустое значение DateTime нельзя, поскольку будет некорректно работать сложение
LOCAL ltBaseTime
ltBaseTime = DTOT(Date())

* Прибавляем к нулевому времени указанное количество секунд
LOCAL ltNewTime
ltNewTime = m.ltBaseTime + m.x

* Выделяем из полученного значение фрагмент со временем
RETURN TTOC(m.ltNewTime,  2 )

Разумеется, этот алгоритм предполгает, что значение параметра не превышает количество секунд в сутках.

x < 24*60*60 (86400)

Поскольку в противном случае придется еще как-то выделять целое количество дней.
...
Рейтинг: 0 / 0
13.02.2009, 11:31
    #35815476
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секунды во время (string)
Если "свернуть" эту функцию, то можно использовать в запросе примерно так

Код: plaintext
1.
2.
3.
4.
5.
SELECT ;
	TTOC(DTOT(Date()) + SUM(my_sec), 2 ) as my_time, ;
	gr ;
FROM table_1 ;
GROUP BY gr
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Секунды во время (string) / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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