![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перевод секунд [D2005, XP]
ГореПрограммер © (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 в секунды ?