Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перевод секунд [D2005, XP]


Страницы:   1 2

ГореПрограммер ©   (2006-09-22 18:17:00) 

Здравствуйте.
У меня есть некое кол- во секунд, можно ли эту цифру быстро каким- нибудь образом перевести в строку вида: 0h12m32s для примера ? и если можно то как ?


Горе программер   (2006-09-23 19:36:00) [1]

Благодарю!


SergP   (2006-09-23 19:08:00) [2]

> [24] Горе программер   (23.09.06 18:52)
> есть значение:
> d1,d2:tdate;
> есть реузльтат:
> d3:=d2-d1;
> есть некое число:
> q:integer;
> содержащее кол-во секунд, просто некий промежуток времени.
> необходимо узнать какой процент q состовляет в d3.


Если от одной даты отнять другую - то получишь длину интервала между этими датами в сутках.
Чтобы перевести в секунды нужно умножить на 86400 (24*60*60)

Значит получаем:
procent:= q/d3/24/60/60*100; //(100 - это из-за того чтобы получить в процентах)

т.е.

procent:=q/d3/864


Горе программер   (2006-09-23 18:52:00) [3]

есть значение:
d1,d2:tdate;
есть реузльтат:
d3:=d2-d1;
есть некое число:
q:integer;
содержащее кол-во секунд, просто некий промежуток времени.
необходимо узнать какой процент q состовляет в d3.


Плохиш   (2006-09-23 16:13:00) [4]


> ГореПрограммер   (22.09.06 19:10) [7]
> Тогда второй тупой вопрос...
> как перевести tdate в секунды ?

Тогда ответ для тупых идиотов: надо умножить значение на количество секунд в сутках.


Desdechado   (2006-09-23 13:23:00) [5]

Mike Petrichenko   (23.09.06 02:05) [18]
> Что тут двусмысленного?
Двусмысленность в том, что в [0] звучало так "У меня есть некое кол- во секунд" (явно длина интервала), а в [7] уже так "как перевести tdate в секунды" (а это точка на оси времени). О чем я и говорил "не путайте".
И именно поэтому дата может быть отрицательной, а длина интервала между 2 датами - никогда.
И никакого иного понимания (житейского или программистского) тут быть не может. Есть ось, есть точки на ней и расстояния между ними.
Так вот - точка традиционно маркируется числом, равным расстоянию от некоторого начала отсчета (другой точки). Но стаким же успехом она может маркироваться 2 числами (от РХ или 1899 г) или 100 числами. Сама точка от этого никак не изменится.
Поэтому еще раз: длина и номер - суть разные вещи, как вес и масса.


Mike Petrichenko   (2006-09-23 02:23:00) [6]


> О сколько нам ещё трёпа чудного преподнесёт форума ДМ дух!
>
> Извиняюсь перед автором, чью строку я так "беспардонно"
> опохабил. :-(

Чем бы дитя не тешилось, лишь бы не вешалось :)


isasa   (2006-09-23 02:20:00) [7]

Зачем переводить?
unit System;
...
TDateTime = type Double;

unit Controls;
...
TTime = type TDateTime;


Германн   (2006-09-23 02:08:00) [8]

О сколько нам ещё трёпа чудного преподнесёт форума ДМ дух!
Извиняюсь перед автором, чью строку я так "беспардонно" опохабил. :-(


Mike Petrichenko   (2006-09-23 02:05:00) [9]


> Дело не в том путаю я что-то или нет. Дело в том что я не
> знаю какое понятие об этом у вопрошающего... Житейское,
> Дельфийское или еще какое-то? А он нам об этом не поведал.
> ..


Вот:

> Тогда второй тупой вопрос...
> как перевести tdate в секунды ?


Что тут двусмысленного? Конкретный тип. Конкретно описан в справке. Конкретно, там же, в справке, задана точка отсчета.


isasa   (2006-09-23 01:50:00) [10]

Не надо в пятницу, вечером, так сложно.
Целые - дни, 1/86400 - секунда, 86400/86400 - сутки - 24 часа. :)


isasa   (2006-09-23 01:47:00) [11]

Если лидирующих нулей не надо, то
strTime:=FormatDateTime('h"h"m"m"s"sec"', i/86400);


SergP   (2006-09-23 01:43:00) [12]

> А если автор имел в виду, что как получить количество секунд
> (а не ПЕРЕВЕСТИ в секунды), то для TDate сее значение всегда
> 0. А для TDateTime - дробная часть:


Хм... С чего это Вы взяли?

Вот посмотрите в controls.pas:

...
TDate = type TDateTime;
...



> Не путайте житейское понятие о дате и времени с понятием
> сего в, ну скажем, тойже Delphi.


Дело не в том путаю я что-то или нет. Дело в том что я не знаю какое понятие об этом у вопрошающего... Житейское, Дельфийское или еще какое-то? А он нам об этом не поведал...


isasa   (2006-09-23 01:42:00) [13]


procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
 i:=60;  // Одна минута
 memo1.Lines.Add(FormatDateTime('hh"h"mm"m"ss"sec"', i/86400));
end;


Mike Petrichenko   (2006-09-23 01:08:00) [14]


> Это уже 2 точки отсчета... А количество секунд от какой
> точки автор не уточнил. Кроме того вдруг ему нужна вообще
> какая-то левая точка отсчета.

Опять ошибочка. Одна точка отчета. Чтим внимательно посты. И исходный вопрос.


> Если такой умник, переведи в секунды дату 150 лет до РХ.
>
>
> Еще раз - не путайте точку на оси с ее расстоянием от чего-
> то (в т.ч. и от начала отсчета). Потому как место отсчета
> расстояния можно менять, но величина (позиция) этой точки
> не изменится.

~ -(60 * 60 * 24 * 365 * 150)

Не путайте житейское понятие о дате и времени с понятием сего в, ну скажем, тойже Delphi.

А вот как перевести дату TDate в секунды:
var
 ADate: TDate;
begin
 ASec := ADate * 60 * 60 * 24;

А если автор имел в виду, что как получить количество секунд (а не ПЕРЕВЕСТИ в секунды), то для TDate сее значение всегда 0. А для TDateTime - дробная часть:
"he fractional part of a TDateTime value is fraction of a 24 hour day that has elapsed."

Да. И еще вот из Маркса:
"When working with negative TDateTime values, computations must handle time portion separately. The fractional part reflects the fraction of a 24-hour day without regard to the sign of the TDateTime value. For example, 6:00 am on 12/29/1899 is –1.25, not –1 + 0.25, which would be –0.75. There are no TDateTime values between –1 and 0."


SergP   (2006-09-22 23:36:00) [15]

> [10] Mike Petrichenko   (22.09.06 22:10)
>
> > Desdechado ©   (22.09.06 20:48) [8]
> > секундами меряются интервалы времени
> > а TDate - это не интервал, это точка на оси времени, дата
>
> > то есть
>
> Да и еще замечание. Любая дана (не в представлении TDate)
> есть интервал. В нащем случае от Рождества Христова. Опять
> же, можно перевести в секунды :)


ты сам сказал, что:

> TDate represents a special type of TDateTime value that
> has no decimal part. A TDate value represents the number
> of days that have elapsed since 12/30/1899.

и

> Да и еще замечание. Любая дана (не в представлении TDate)
> есть интервал. В нащем случае от Рождества Христова. Опять
> же, можно перевести в секунды :)


Это уже 2 точки отсчета... А количество секунд от какой точки автор не уточнил. Кроме того вдруг ему нужна вообще какая-то левая точка отсчета.

так что Desdechado прав.


Desdechado   (2006-09-22 22:52:00) [16]

> Любая дата есть интервал
Если такой умник, переведи в секунды дату 150 лет до РХ.

Еще раз - не путайте точку на оси с ее расстоянием от чего-то (в т.ч. и от начала отсчета). Потому как место отсчета расстояния можно менять, но величина (позиция) этой точки не изменится.


Mike Petrichenko   (2006-09-22 22:10:00) [17]


> Desdechado ©   (22.09.06 20:48) [8]
> секундами меряются интервалы времени
> а TDate - это не интервал, это точка на оси времени, дата
> то есть

Да и еще замечание. Любая дана (не в представлении TDate) есть интервал. В нащем случае от Рождества Христова. Опять же, можно перевести в секунды :)


Mike Petrichenko   (2006-09-22 21:59:00) [18]


> Desdechado ©   (22.09.06 20:48) [8]
> секундами меряются интервалы времени
> а TDate - это не интервал, это точка на оси времени, дата
> то есть

Ошибочка! Это интервал! Чтим Маркса:
TDate represents a special type of TDateTime value that has no decimal part. A TDate value represents the number of days that have elapsed since 12/30/1899.
Так что в секунды перевести можно :)


Desdechado   (2006-09-22 20:48:00) [19]

секундами меряются интервалы времени
а TDate - это не интервал, это точка на оси времени, дата то есть


ГореПрограммер   (2006-09-22 19:10:00) [20]

Тогда второй тупой вопрос...
как перевести tdate в секунды ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо