Страница 1 из 1
Установить системную дату
Добавлено: 29 авг 2006, 10:04
BBB
В DOS-овском Pascal-е (Borland Pasca 7.0) была функция установки системной даты (даты на компьютере):
procedure SetDate(Year, Month, Day: Word);
То есть, я имею в виду, эта функция меняла ТОЛЬКО дату, не трогая время.
(в DOS-овском Borland C++ также были аналогичные функции)
Пробовал найти подобное в Delphi - нашел лишь функцию (судя по всему, аналог WinAPI-функции) SetLocalTime. Которая устанавливает не только дату, но и время.
Вопрос. Неужели теперь (в Windows-?) нет возможности изменить ТОЛЬКО системную дату?
Заранее спасибо.
Добавлено: 29 авг 2006, 11:10
vunder
Что-то не понял, чем тебя не устраивает SetLocalTime. В справке есть подробное описание функции и структуры _SYSTEMTIME.
Ну а вообще, смотрю справку не читаешь. SetSystemTime
Добавлено: 29 авг 2006, 11:27
BBB
vunder писал(а):Что-то не понял, чем тебя не устраивает SetLocalTime. В справке есть подробное описание функции и структуры _SYSTEMTIME.
Ну а вообще, смотрю справку не читаешь. SetSystemTime
Я где-то говорил, что не понимаю, как пользоваться функцией
SetLocalTime (
SetSystemTime - насколько я знаю, аналогичная, за исключением того, что требует гринвичское время)????
А "не устраивает" меня SetLocalTime тем, что (мне казалось, в первом своем сообщении я вполне понятно написал это) там НЕОБХОДИМО (таки, поправь, если я ошибаюсь) устнавливать не только дату, но и текущее ВРЕМЯ. А мне хотелось бы изменить ЛИШЬ ДАТУ (примерно так, как происходит при наборе в командной строке команды
date или в упомянутой выше функции DOS-Pascal-я
SetDate)
Добавлено: 29 авг 2006, 16:00
Eugie
Да самому написать проще
Код: Выделить всё
{ 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;
Добавлено: 29 авг 2006, 16:22
BBB
Eugie писал(а):Да самому написать проще
Код: Выделить всё
{][/quote]
Это все понятно :) Но в этом примере все равно вызывается функция, устанавливающая не только дату, но и время (ведь SetSystemTime поступает именно так, не так ли? :) )
Просто у меня легкий бзик, что между вызовами GetSystemTime и SetSystemTime пройдет некоторый, хотя бы и микроскопически малый промежуток времени (а если еще и выполнять какие-то действия, то, может, и не малый), то есть, после вызова SetSystemTime часы на компьютере уже будет отставать на этот самый промежуток времени. Что несколько коробит пунктуальную душу программиста :)
Кстати, еще раз повторюсь, что в твоем примере, наверное, все-таки, также стоит пользоваться не Get/Set[b]System[/b]Time, а Get/Set[b]Local[/b]Time
Добавлено: 29 авг 2006, 16:33
Eugie
Но в этом примере все равно вызывается функция, устанавливающая не только дату, но и время (ведь SetSystemTime поступает именно так, не так ли? )
Не так. GetSystemTime инициализирует все поля структуры, а мы меняем только относящиеся к дате.
между вызовами GetSystemTime и SetSystemTime пройдет некоторый, хотя бы и микроскопически малый промежуток времени
Разрешение сист.таймера все одно меньше. Если только не предполагать, что между вызовами Get/SetSystemTime произойдет переключение контекста и планировщик потоков по в этот момент сломается :lol:
стоит пользоваться не Get/SetSystemTime, а Get/SetLocalTime
Без разницы - мы же дату меняем, а не время
Добавлено: 29 авг 2006, 16:34
Игорь Акопян
BBB, имхо, в приведённом примере речь может идти о миллисекундах - если это тебя беспокоит - пора подумать об отпуске

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

[/quote]Боюсь, не отпустят. Только недели два как вернулся оттуда
PS. Эх... А под DOS-ом-то это было возможно! :roll:
Добавлено: 29 авг 2006, 17:54
Eugie
Согласен, интуитивно понятнее задавать локальную дату, а не UTC. Посему изменил имя функции на SetUTCDate
