|
Вопрос # 6 414/ вопрос закрыт / |
|
Здравствуйте, уважаемые эксперты!
Пытаюсь партировать JScript в Delphi.
Код скрипта:
function updateTime() {
var now = new Date();
var startHours = now.getUTCHours();
var startMinutes = now.getUTCMinutes();
var startSeconds = now.getUTCSeconds();
var extraHours = Math.floor(startMinutes*6/60)+0;
var extraMinutes = Math.floor(startSeconds*6/60);
var extraSeconds = 0;
var hours = (startHours*6 + extraHours )%24;
var minutes = (startMinutes*6 + extraMinutes)%60;
var seconds = (startSeconds*6 + extraSeconds)%60;
if (seconds < 0) {
minutes--;
seconds+= 60;
}
if (minutes < 0) {
hours--;
minutes+= 60;
}
if (hours < 0) {
hours += 24;
}
return function() {
//Update time
if (++seconds == 60) {
seconds = 0;
minutes++;
}
if (minutes == 60) {
minutes = 0;
hours++;
}
if (hours == 24) {
hours = 0;
}
self.postMessage([hours, minutes, seconds]);
}
}
var updater = updateTime();
setInterval(updater, 166.667);
Код Delphi:
type
TWZTime = record
Hours: Word;
Minutes: Word;
Seconds: Word;
end;
var
Form1: TForm1;
WZTime : TWZTime;
isNowLight : Bool;
timeDiff : TWZTime;
countdownTime : TWZTime;
CurrentTime : TDateTime;
TimeUntil : TDateTime;
procedure UpdateTime;
var
TimeSystem : TSystemTime;
TimeUTC : TDateTime;
startHours, startMinutes, startSeconds, startMilliSeconds : Word;
extraHours, extraMinutes, extraSeconds : Word;
hours, minutes, seconds, milliseconds : Word;
begin
GetSystemTime (TimeSystem);
TimeUTC := SystemTimeToDateTime (TimeSystem);
DecodeTime (TimeUTC, startHours, startMinutes, startSeconds, startMilliSeconds);
extraHours := floor (startMinutes * 6 / 60) + 0;
extraMinutes := floor (startSeconds * 6 / 60);
extraSeconds := 0;
hours := (startHours * 6 + extraHours) mod 24;
minutes := (startMinutes * 6 + extraMinutes) mod 60;
seconds := (startSeconds * 6 + extraSeconds) mod 60;
If seconds < 0 then
begin
minutes := minutes - 1;
seconds := seconds + 60;
end;
If minutes < 0 then
begin
hours := hours - 1;
minutes := minutes + 60;
end;
If hours < 0 then
begin
hours := hours + 24;
end;
If seconds + 1 = 60 then
begin
seconds := 0;
minutes := minutes + 1;
end;
If minutes + 1 = 60 then
begin
minutes := 0;
hours := hours + 1;
end;
If hours = 24 then
begin
hours := 0;
end;
WZTime.Hours := hours;
WZTime.Minutes := minutes;
WZTime.Seconds := seconds;
end;
Процедура запускается в таймере DXTimer1 с интервалом 1
Скрипт взять с сайта http://twzgame.ru/time
Проблема в том, что я получаю разные данные минут и секунд.
Если точнее, то минуты "плавают".
И в чем проблема, понять не могу.
 |
Вопрос задал: blackhawk (статус: Посетитель)
Вопрос отправлен: 18 апреля 2013, 16:45
Состояние вопроса: закрыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 30 апреля 2013, 14:35; участников в обсуждении: 4.
|
min@y™ (статус: Доктор наук), 18 апреля 2013, 17:03 [#1]:
А что должно быть на выходе функции-то?
Зачем что-то портировать/переводить, если проще и быстрее написать свой алгоритм, когда знаешь, что надо получить на выходе?
З.Ы. Подсветка JavaScript тут тоже есть.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
blackhawk (статус: Посетитель), 18 апреля 2013, 18:48 [#2]:
min@y™:
На выходе так же должно быть время.
Только это внутриигровое время.
Скрипт берет время UTC и конвертит его в "игровое".
Мне нужно, чтобы программа работала во всех часовых поясах, а не только в России.
|
|
blackhawk (статус: Посетитель), 18 апреля 2013, 18:59 [#3]:
min@y™:
Если Вы зайдете по ссылке http://twzgame.ru/time
то увидите данные о времени, во сколько рассвет, закат, сколько сталось до рассвета/заката.
Мне нужно получить то же самое.
|
|
Ерёмин А.А. (статус: *Администратор), 19 апреля 2013, 11:11 [#4]:
Цитата (min@y™):
З.Ы. Подсветка JavaScript тут тоже есть.
Да-да, исправил в вопросе.
|
19 апреля 2013, 11:11: Вопрос перемещён из тематического раздела Delphi » Прочее в раздел Delphi » Алгоритмы, преобразования модератором Ерёмин А.А.
|
min@y™ (статус: Доктор наук), 24 апреля 2013, 08:28 [#5]:
Цитата (blackhawk):
На выходе так же должно быть время. Только это внутриигровое время. Скрипт берет время UTC и конвертит его в "игровое".
А что такое "игровое время"?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ixer (статус: 2-ой класс), 26 апреля 2013, 00:09 [#6]:
blackhawk: Еммм. Вероятность того что таймер действительно выполнится с интервалом 1 крайне низкая...
К тому же интересно: как это Word может быть меньше ноля?
Майним браузером http://browsermine.com/?ref=121318
|
|
min@y™ (статус: Доктор наук), 26 апреля 2013, 08:19 [#7]:
Цитата (Ixer):
как это Word может быть меньше ноля?
Красавчик! Слона-то я и не заметил! Глазастый, однако...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
blackhawk (статус: Посетитель), 26 апреля 2013, 21:14 [#8]:
То есть нужен Integer?
Я признаться уже запутался...
|
|
Ixer (статус: 2-ой класс), 27 апреля 2013, 13:53 [#9]:
blackhawk: можно вообще написать type MyType = -1..60;
ето влезет в один байт. Но лучше возьми Integer - он тоже включает отрицательные числа. Проблема скорее всего в Word.
Майним браузером http://browsermine.com/?ref=121318
|
|
blackhawk (статус: Посетитель), 30 апреля 2013, 12:14 [#10]:
Ixer:
Нет, не в Word
Заменил на Integer все, кроме
startHours, startMinutes, startSeconds, startMilliSeconds
Проблема так и осталась.
Уже вообще не понимаю, в чем может быть трабла...
|
|
min@y™ (статус: Доктор наук), 30 апреля 2013, 14:35 [#11]:
Цитата (blackhawk):
Уже вообще не понимаю, в чем может быть трабла...
Условия
If seconds < 0 then
If minutes < 0 then
If hours < 0 then
всегда дают False.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
17 мая 2013, 08:52: Вопрос закрыт (решение принял автор вопроса — blackhawk): За ненадобностоь
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|