Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2011, 16:55   #11
men232
Пользователь
 
Регистрация: 11.05.2011
Сообщений: 59
По умолчанию

Что мну нудно подставлять? Now?
men232 вне форума Ответить с цитированием
Старый 03.08.2011, 17:05   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Что мну нудно подставлять? Now?
да.
Now.

p.s. но учтите, возможны проблемы, связанные с тем, что Now возвращает местное время, а Вам, похоже, надо UTC...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.08.2011, 17:07   #13
men232
Пользователь
 
Регистрация: 11.05.2011
Сообщений: 59
По умолчанию

Попытаюсь всё объяснить!

Есть два числ:
"unban" 1312365591
"time" 1312365291

Если (unban - time)/60= 5 (Бан на 5 мин), вот такая система бана в игре! Вот теперь мне нужно генерировать time из текущей даты! Есть немного исходного кода lua

Код:
function xgui.ConvertTime( seconds )
	--Convert number of seconds remaining to something more legible (Thanks JamminR!)
	local years = math.floor( seconds / 31536000 )
	seconds = seconds - ( years * 31536000 )
	local days = math.floor( seconds / 86400 )
	seconds = seconds - ( days * 86400 )
	local hours = math.floor( seconds/3600 )
	seconds = seconds - ( hours * 3600 )
	local minutes = math.floor( seconds/60 )
	seconds = seconds - ( minutes * 60 )
	local xgui_temp = ""
	if years ~= 0 then xgui_temp = xgui_temp .. years .. " year" .. ( ( years > 1 ) and "s, " or ", " ) end
	if days ~= 0 then xgui_temp = xgui_temp .. days .. " day" .. ( ( days > 1 ) and "s, " or ", " ) end
	xgui_temp = xgui_temp .. ( ( hours < 10 ) and "0" or "" ) .. hours .. ":"
	xgui_temp = xgui_temp .. ( ( minutes < 10 ) and "0" or "" ) .. minutes .. ":"
	return xgui_temp .. ( ( seconds < 10 and "0" or "" ) .. seconds )
end
Вот в одном месте есть код вызова:

Код:
ConvertTime( os.time())
в lua os.time () функция дает Вам число секунд с начала эпохи linux.

Я скидывал сайт где есть подобное в онлайн, вот мне нужно также рассчитать только в delphi.

Возможно в чем то ошибся!
men232 вне форума Ответить с цитированием
Старый 03.08.2011, 18:03   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Я скидывал сайт где есть подобное в онлайн, вот мне нужно также рассчитать только в delphi.
ну это уже понятно.
Так я и дал Вам функцию, которая переводит время из формата Delphi (Windows) в формат Unix, то, что Вы называете " число секунд с начала эпохи linux."
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.08.2011, 23:36   #15
men232
Пользователь
 
Регистрация: 11.05.2011
Сообщений: 59
По умолчанию

Использую вашу функцию, но не получаю нужный результат! Вот что выходит 14.09.56451

Нашлось решение!
Код:
var
TimeNow, StartTime: TDateTime;
AllSec: Extended;
UnixTime: String;

begin
  StartTime := strtodatetime('18.09.06 14:12:45');
  TimeNow := now;
  AllSec := (TimeNow-StartTime)*24*60*60;
  UnixTime:=copy(FloatToStr(AllSec), 0, pos(',', FloatToStr(AllSec)) - 1);
end;

Последний раз редактировалось Stilet; 04.08.2011 в 09:07.
men232 вне форума Ответить с цитированием
Старый 04.08.2011, 08:24   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Использую вашу функцию, но не получаю нужный результат! Вот что выходит 14.09.56451
Предложеннная мною выше функция возвращает LONGINT - это ЧИСЛО!!!
Каким образом Вы его в дату преобразовываете?!?! Т.е. откуда взялось 14.09.56451 ?!

Цитата:
Нашлось решение!
Код:
AllSec := (TimeNow-StartTime)*24*60*60;
ну, нашлось и нашлось...
Главное, что Вас оно устраивает..
Заметьте, только из Вашего кода теперь видно, что Вас интересует не дата в формате UnixTime, а число секунд между двумя датами.
И почему Вы это число в виде строки получаете - мне тоже не очень понятно. Но Вам виднее, как Вам нужно...


p.s.
Цитата:
Код:
UnixTime:=copy(FloatToStr(AllSec), 0, pos(',', FloatToStr(AllSec)) - 1);
Это кошмарный ужас! Про индуский код слышали?!
1) это не везде будет работать - зависит от настройки локали. (не везде дробная часть отделяется запятой. У многих - точкой).
2) Чтобы получить целую часть числа достаточно выполнить TRUNC(AllSec)

Последний раз редактировалось Serge_Bliznykov; 04.08.2011 в 08:26.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.08.2011, 09:03   #17
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Уже дано составили бы сами. Я же привел алгоритм - вычислить количество суток, перевести в секунды. Как я понял это технический вопрос, то здесь проблем меньше. Я то думал Вам нужно время астрономическое...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 04.08.2011, 09:11   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что SecondsBetween уже вышла из моды?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.08.2011, 09:36   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet
А что SecondsBetween уже вышла из моды?
нет. просто пытливые умы её сами реализовывают (ну, немножко криво, но в целом похоже : )

Вот исходный текст функции:
Код:
из SysUtils
  HoursPerDay   = 24;
  MinsPerHour   = 60;
  SecsPerMin    = 60;
  MSecsPerSec   = 1000;
  MinsPerDay    = HoursPerDay * MinsPerHour;
  SecsPerDay    = MinsPerDay * SecsPerMin;

из DateUtils

function SpanOfNowAndThen(const ANow, AThen: TDateTime): TDateTime;
begin
  if ANow < AThen then
    Result := AThen - ANow
  else
    Result := ANow - AThen;
end;

function SecondSpan(const ANow, AThen: TDateTime): Double;
begin
  Result := SecsPerDay * SpanOfNowAndThen(ANow, AThen);
end;

function SecondsBetween(const ANow, AThen: TDateTime): Int64;
begin
  Result := Trunc(SecondSpan(ANow, AThen));
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить количество строк не делая лишний запрос lacost SQL, базы данных 7 20.01.2011 11:06
Получить количество записей с определенным значением RamireZ БД в Delphi 7 04.06.2010 07:12
Как получить количество столбцов из выборки ssdm Java Базы данных (JDBC, JPA, Hibernate) 1 25.01.2010 19:21