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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 02.01.2013, 19:52   #1
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию Delphi. Уменьшить системное время

1) Как уменьшить системное время на 1 час??
2) Как найти абсолютную сумму чисел -5 45 -88 -78 ??
StudentMarat вне форума
Старый 02.01.2013, 22:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как уменьшить системное время на 1 час??
Код:
uses dateutils
...
var st:SYSTEMTIME;
...
DateTimeToSystemTime(now,st);dec(st.hour);
SetSystemTime(@st);
...
Цитата:
абсолютную сумму чисел -5 45 -88 -78
Код:
...:=abs(-5+45-88-78);
I'm learning to live...
Stilet вне форума
Старый 03.01.2013, 03:09   #3
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
uses dateutils
...
var st:SYSTEMTIME;
...
DateTimeToSystemTime(now,st);dec(st.hour);
SetSystemTime(@st);
...
Код:
...:=abs(-5+45-88-78);
С абсолютной суммой разобрался. А насчет времени, почему-то у меня увеличивается время на 2 часа. Код использовал, который Вы написали. Это от часового пояса может зависеть??

Погуглил, наше этот код, только не догоняю, как его использовать
Код:
function SetPCSystemTime(tDati: TDateTime): Boolean;
var

tSetDati: TDateTime;
vDatiBias: Variant;
tTZI: TTimeZoneInformation;
tST: TSystemTime;
begin

GetTimeZoneInformation(tTZI);
vDatiBias := tTZI.Bias / 1440;
tSetDati := tDati + vDatiBias;
with tST do
begin
wYear := StrToInt(FormatDateTime('yyyy', tSetDati));
wMonth := StrToInt(FormatDateTime('mm', tSetDati));
wDay := StrToInt(FormatDateTime('dd', tSetDati));
wHour := StrToInt(FormatDateTime('hh', tSetDati));
wMinute := StrToInt(FormatDateTime('nn', tSetDati));
wSecond := StrToInt(FormatDateTime('ss', tSetDati));
wMilliseconds := 0;
end;
SetPCSystemTime := SetSystemTime(tST);
end;

Последний раз редактировалось Stilet; 03.01.2013 в 08:40.
StudentMarat вне форума
Старый 03.01.2013, 08:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Это от часового пояса может зависеть??
Врядли. У меня все в порядке.
I'm learning to live...
Stilet вне форума
Старый 03.01.2013, 16:35   #5
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Врядли. У меня все в порядке.
Я не хочу показаться наглым, но не могли бы Вы выложить скомпилированную программу вместе с кодом на форум. На форме нужно просто разместить одну кнопку (Button) и чтобы каждый раз при нажатии на эту кнопку системное время уменьшалось на 1 час, т.е. например, ели время на компьютере 11:50, то при нажатии на кнопку время будет 10:50 и т.д.
Просто очень хочу понять, что у меня не получается. Заодно, может это и другим пригодится
StudentMarat вне форума
Старый 03.01.2013, 22:05   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты прав, эта функция кое от чего зависит и на разных ОС работает по разному.
Используй SetLocalTime вместо SetSystemTime.

P.S. Между прочем мог бы не поленится в хелпе посмотреть See also, не было бы таких проблем.
I'm learning to live...
Stilet вне форума
Старый 03.01.2013, 23:44   #7
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

После нескольких часов поиска в интернете и благодаря помощи Stilet пришел к выводу, что нужно использовать такой код:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  lt : TSystemTime;
begin
  GetLocalTime(lt);
  lt.wHour := lt.wHour - 1;
  SetLocalTime(lt);
end;
Здесь каждый раз при нажатии на кнопку системное время уменьшается на 1 час. Тестировал на операционной системе WindowsXP и Windows7. Все работает. Если я не прав, укажите ошибку.
StudentMarat вне форума
Старый 04.01.2013, 22:06   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Раз работает - значит прав, че сомневаешся?
I'm learning to live...
Stilet вне форума
Старый 04.01.2013, 22:16   #9
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Раз работает - значит прав, че сомневаешся?
С моей точки зрения, все правильно. Тему можно закрыть
StudentMarat вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
текущее время (системное время ) Sirk0 Общие вопросы Delphi 27 07.03.2015 17:52
Какой код надо прописать в Delphi (задать таймер на 30 дней (системное время,год,м) программа закрывается mnbvcxz11 Общие вопросы Delphi 3 22.08.2009 11:29
Системное время Demien Общие вопросы Delphi 7 09.04.2009 12:36
Системное время???Помогите???(Delphi) Dinarochka Помощь студентам 5 28.05.2008 12:11
Системное время TyoshA Общие вопросы Delphi 2 05.02.2008 23:41