![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
кол-во времени (Integer), в формат даты
fihi © (2006-10-14 14:07:00)Допустим есть некоторая Integer'овая переменная, которая хранит в себе кол-во секунд, необходимо эти секунды перевести в подобие формата даты. Ну т.е. n-секунд => "1 день, 2 часа, 5 минут и 12 секунд". Как такое осуществить?
RASkov (2006-10-15 19:42:00) [1]> [21] Anatoly Podgoretsky © (15.10.06 02:17)
Сами Вы "студент" с усами:)))
RASkov (2006-10-15 18:04:00) [2]Подобие даты.... Понял, Спасибо.
Anatoly Podgoretsky (2006-10-15 02:17:00) [3]RASkov (15.10.06 00:44) [19]
Учись студент.
sniknik (2006-10-15 02:11:00) [4]> узнать сколько там (в этом кол-ве секунд) дней, часов, минут, секунд.
нет, вопрос стоял о переводе в подобие формата даты, перечитай [0] там не сказано о том что нужна строка в формате отображающим дату.
т.е. есть время в секундах, надо перевести в дату... дататайм (зачем подобие если в нормальную проще) потому и "прицепились". причем про отображение, ничего не было, оно видимо только для пояснений тут, на форуме, а полученное значение возможно будут использовать както иначе.
итак зачем какието множественные (и не полные к тому же) операции если все нужное получается одной? которой автор уже решил, ну недо-разобрался чуть чуть..., а ты ему готовый корявый код... пусть бы лучше до-разобрался.
пример (надеюсь он сначала разберется а после сюда заглянет)
var//возьмем секунды с начала включения компа
dt: TDateTime;
i: integer;
begin
i:= GetTickCount() div 1000;//вот оно, готово! сделали преобразование, то о котором вопрос
dt:= i/86400;//ну и отобразить, а то без этого похоже не понятно, но это уже лишнее(!!!)
Caption:= IntToStr(Trunc(dt))+' дней, '+FormatDateTime('hh часов, nn минут и ss секунд', dt);
end;
RASkov (2006-10-15 00:44:00) [5]Что Вы к Дате прицепились сказано же - имеются N количества секунд и нужно узнать сколько там (в этом кол-ве секунд) дней, часов, минут, секунд.
И прошу прощения может я и в самом деле тогда не понял вопроса.
RASkov (2006-10-15 00:36:00) [6]> [16] Anatoly Podgoretsky © (14.10.06 21:13)
> [17] sniknik © (14.10.06 21:15)
Спасибо за намеки, но чето все равно не въеду
> мне нужно было вычислить сколько в этих секундах суток,
> часов, минут, секунд; и записать соответствующим образом.
то что я привел кусок кода - никак неотвечает на вопрос?. За исключением суток... но и их можно посчитать
> функция, называется Trunc
и
> есть некоторая Integer'овая переменная
К чему?
Вот пусть автор ченить скажет. А то молчит как рыба.
> конечно не с учетом твоего дурного кода
Может быть - Вам виднее.
sniknik (2006-10-14 21:15:00) [7]> Не знаю что он там сделал
перевел свои секунды в формат дататайм. про отображение вопроса не было, была попытка обьяснить что имеется ввиду под "подобием формата даты".
Anatoly Podgoretsky (2006-10-14 21:13:00) [8]RASkov (14.10.06 20:18) [13]
Тебя это как то смущает, для подсчета дней другая функция, называется Trunc, конечно не с учетом твоего дурного кода, а с учетом кода автора - он уже разделил на 86400, а большего и не надо!
У тебя еще есть вопросы по начальной математике?
RASkov (2006-10-14 20:56:00) [9]> [14] sniknik © (14.10.06 20:37)
Не знаю что он там сделал
> И показывает данный код, 1970 + в моих секундах в формате
> даты. Как сделать достать реальную дату я не знаю.
> caption := FormatDateTime('dd/mm/yyyy hh:nn:ss', EncodeDate(1970,
> 1, 1) + ((99466) / 86400));
У меня покажит.... да проверить не долго что у меня покажет. Я полностью написал... копируй от сюда и вставляй в редактор кода.
Воощем покажет 23ч. 59м. 59с.
sniknik (2006-10-14 20:37:00) [10]> А автору нужно кол-во сек пересчитать в дни, часы, минуты, сек.
он это сделал > 99466 / 86400
RASkov (2006-10-14 20:18:00) [11]Тем более у DecodeTime первый параметр TDateTime
А автору нужно кол-во сек пересчитать в дни, часы, минуты, сек.
RASkov (2006-10-14 19:05:00) [12]> [11] Anatoly Podgoretsky © (14.10.06 19:02)
Да какая разница - пусть сам выбирает. DecodeTime - это стандартное, а я ему велосипед без колес:)
Anatoly Podgoretsky (2006-10-14 19:02:00) [13]RASkov (14.10.06 18:58) [10]
Бр, а DecodeTime использовать не судьба?
RASkov (2006-10-14 18:58:00) [14]> [2] fihi (14.10.06 14:37)
function GetTimeS(const N: Integer): String;
var H, M, S: Integer;
begin
H:=N div 60 div 60;
M:=N div 60 mod 60;
S:=N mod 60;
Result:=Format('%d . %d . %d .', [H, M, S]);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetTimeS(86399));
end;
Но это без дней.
Anatoly Podgoretsky (2006-10-14 18:57:00) [15]Формат TDateTime и понятие дата - это малосвязанные вещи, формат TDateTime это вообще то тривиальный Double
А последний вопрос имеет четкий ответ, если забудешь про понятие дата, это всего лишь простое форматирование, сообственно форматировать надо только первую часть - количество суток - это целое от формата, а остальное стандартной функцией FormatDateTime, достаточно указать нужную маску (параметр Format). Но если и это не подходит, то преобразовывай каждую составляющую с помощью IntToStr
Это хоть и конференция для Начинающих, но задача ниже уровнем.
fihi (2006-10-14 18:51:00) [16]Изначально я подразумевал формат даты не TDateTime, а видимо псевдо дату, мне нужно было вычислить сколько в этих секундах суток, часов, минут, секунд; и записать соответствующим образом.
Anatoly Podgoretsky (2006-10-14 18:46:00) [17]Правильно показывает, 1.01.1970 + чуть более одного дня, а ты от какой даты хочешь отсчитывать, от той и считай. Поскольку количество секунд это не дата, а интервал. И приводить ее к дате можно, как раз именно твоим путем, выбрав правильную начальную дату. Код у тебя правильный, а вот что такое даты ты видимо не понимешь, но не волнуйся, это понимают только несколько человек в мире.
fihi (2006-10-14 18:39:00) [18]Вот, что я соамостоятельно сделал, но подозреваю, что совершенно не в том направлении. 99466 - это моё кол-во секунд. И показывает данный код, 1970 + в моих секундах в формате даты. Как сделать достать реальную дату я не знаю.
caption := FormatDateTime('dd/mm/yyyy hh:nn:ss', EncodeDate(1970, 1, 1) + ((99466) / 86400));
sniknik (2006-10-14 18:12:00) [19]> 10$
неплохие расценки за одну операцию... ;о))
> Господа, неужели не нашлось человека который сталкивался с подобной ситуацией, и писал для себя код?
господа не "сталкиваются с ситуациями" а просто пишут то что нужно... все что нужно для "написания" сказано в [1]...
p.s. вместо того чтобы выпрашивать код, положил бы свой вариант, ктонибудь наверняка бы исправил, после ктото исправил его и т.д. до оптимума.
был бы форум, обсуждение, а так вопрос - ответ это больше на службу поддержки тянет... скучно и неинтересно. (это обьяснение почему твой вопрос не вызывает энтузиазма... на будущее. пока в нем офтопить куда интереснее)
Palladin (2006-10-14 17:50:00) [20]10$