Установить системную дату
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
В DOS-овском Pascal-е (Borland Pasca 7.0) была функция установки системной даты (даты на компьютере):
procedure SetDate(Year, Month, Day: Word);
То есть, я имею в виду, эта функция меняла ТОЛЬКО дату, не трогая время.
(в DOS-овском Borland C++ также были аналогичные функции)
Пробовал найти подобное в Delphi - нашел лишь функцию (судя по всему, аналог WinAPI-функции) SetLocalTime. Которая устанавливает не только дату, но и время.
Вопрос. Неужели теперь (в Windows-?) нет возможности изменить ТОЛЬКО системную дату?
Заранее спасибо.
procedure SetDate(Year, Month, Day: Word);
То есть, я имею в виду, эта функция меняла ТОЛЬКО дату, не трогая время.
(в DOS-овском Borland C++ также были аналогичные функции)
Пробовал найти подобное в Delphi - нашел лишь функцию (судя по всему, аналог WinAPI-функции) SetLocalTime. Которая устанавливает не только дату, но и время.
Вопрос. Неужели теперь (в Windows-?) нет возможности изменить ТОЛЬКО системную дату?
Заранее спасибо.
Я где-то говорил, что не понимаю, как пользоваться функцией SetLocalTime (SetSystemTime - насколько я знаю, аналогичная, за исключением того, что требует гринвичское время)????vunder писал(а):Что-то не понял, чем тебя не устраивает SetLocalTime. В справке есть подробное описание функции и структуры _SYSTEMTIME.
Ну а вообще, смотрю справку не читаешь. SetSystemTime
А "не устраивает" меня SetLocalTime тем, что (мне казалось, в первом своем сообщении я вполне понятно написал это) там НЕОБХОДИМО (таки, поправь, если я ошибаюсь) устнавливать не только дату, но и текущее ВРЕМЯ. А мне хотелось бы изменить ЛИШЬ ДАТУ (примерно так, как происходит при наборе в командной строке команды date или в упомянутой выше функции DOS-Pascal-я SetDate)
Да самому написать проще

Код: Выделить всё
{ Set UTC (Greenwich) date }
{ Usage notes: }
{ pDay (1-31), pMonth (1-12) pYear (1601-...) }
function SetUTCDate(pDay, pMonth, pYear: Word): Boolean;
var st: TSystemTime;
begin
Result := False;
GetSystemTime(st);
with st do begin
wDay := pDay;
wMonth := pMonth;
wYear := pYear;
end;
if SetSystemTime(st) then
Result := True;
end;
Eugie писал(а):Да самому написать проще![]()
Код: Выделить всё
{][/quote] Это все понятно :) Но в этом примере все равно вызывается функция, устанавливающая не только дату, но и время (ведь SetSystemTime поступает именно так, не так ли? :) ) Просто у меня легкий бзик, что между вызовами GetSystemTime и SetSystemTime пройдет некоторый, хотя бы и микроскопически малый промежуток времени (а если еще и выполнять какие-то действия, то, может, и не малый), то есть, после вызова SetSystemTime часы на компьютере уже будет отставать на этот самый промежуток времени. Что несколько коробит пунктуальную душу программиста :) Кстати, еще раз повторюсь, что в твоем примере, наверное, все-таки, также стоит пользоваться не Get/Set[b]System[/b]Time, а Get/Set[b]Local[/b]Time
Не так. GetSystemTime инициализирует все поля структуры, а мы меняем только относящиеся к дате.Но в этом примере все равно вызывается функция, устанавливающая не только дату, но и время (ведь SetSystemTime поступает именно так, не так ли? )
Разрешение сист.таймера все одно меньше. Если только не предполагать, что между вызовами Get/SetSystemTime произойдет переключение контекста и планировщик потоков по в этот момент сломается :lol:между вызовами GetSystemTime и SetSystemTime пройдет некоторый, хотя бы и микроскопически малый промежуток времени
Без разницы - мы же дату меняем, а не времястоит пользоваться не Get/SetSystemTime, а Get/SetLocalTime
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
BBB, имхо, в приведённом примере речь может идти о миллисекундах - если это тебя беспокоит - пора подумать об отпуске 


Имхо, есть тонкости (если угодно - краевые эффекты).Eugie писал(а):Без разницы - мы же дату меняем, а не времястоит пользоваться не Get/SetSystemTime, а Get/SetLocalTime
Допустим, сейчас в Москве 2:00 30 августа 2006. Мы хотим установить дату... ну пусть 14 сентября 2006.
Но GetSystemTime вернет гринвичское время, то есть 22:00 (вроде бы, с учетом летнего времени именно 4 часа разница) 29 августа.
Если мы теперть установим поля даты структуры TSystemTime в 14 сентября 2006 и вызовем SetSystemTime, то по местному (московскому) времени получим уже 15 сентября (а не 14, как хотели).
ПО-моему, так.
======================================
Ага, именно про это я и толкую :lol: (ну хочется быть пунктуальным по возможности ] пора подумать об отпускеИгорь Акопян писал(а):BBB, имхо, в приведённом примере речь может идти о миллисекундах - если это тебя беспокоит -


PS. Эх... А под DOS-ом-то это было возможно! :roll:
Согласен, интуитивно понятнее задавать локальную дату, а не UTC. Посему изменил имя функции на SetUTCDate 
