Текущий архив: 2005.07.11;
Скачать: CL | DM;
ВнизИзменение ситемной даты Найти похожие ветки
← →
Леша (2005-06-24 12:34) [0]Необходимо сделать при входе в мою программу отображение системной даты и если нужно - ее изменение.
Как узнать текущую дату я знаю. Но как установить новую дату?
Например используя MaskEdit и Button
Кто знает, подскажите пожалуйста.
← →
TUser © (2005-06-24 12:46) [1]SetSystemTime
← →
Леша (2005-06-24 12:51) [2]Извеняюсь, но как воспользоваться SetSystemTime я не пойму, не могли бы привести пример.
← →
kot andrei (2005-06-24 12:53) [3]кстати давно хотел спросить : чем отличается GetSystemTime от GetLocalTime? У меня на машине результаты этих функций расходятся на 6 часов. Соответствует действительности GetLocalTime.
Порядочный Help, грохнул вместе с D5 , а с D7 ничего найти не мог...(Все-таки в D5 хелп был гораздо лучше)
← →
-=XP=- © (2005-06-24 12:59) [4]У меня на машине результаты этих функций расходятся на 6 часов
Видимо, Вы откуда-то из Сибири, или из США. Разница между Вашим часовым поясом и GMT - 6 часов.
← →
kot andrei (2005-06-24 13:08) [5]Нет я в Краснодаре GMT+3
← →
Леша (2005-06-24 13:51) [6]...И в результате ничего...
Спасибо конечно за помощь, но я без примера не разберусь..
← →
gydvin (2005-06-24 14:04) [7]а попробуй че нибуть типа
var
d:_systemtime;
begin
d.wYear:=2005 ;
....
SetSystemTime(d);
← →
Леша (2005-06-24 14:12) [8]Да так попробовал, но дата не меняется... Увы
procedure TForm1.Button1Click(Sender: TObject);
var
d:_systemtime;
begin
d.wYear:=2005;
d.wMonth:=06;
d.wDay:=10;
SetSystemTime(d);
end;
end.
← →
gydvin (2005-06-24 14:16) [9]а получить можно
s:=timetostr(Now);
s:=datetostr(Now);
← →
evvcom © (2005-06-24 14:18) [10]
> Нет я в Краснодаре GMT+3
А в региональных настройках тоже GMT+3? GetSystemTime возвращает время GMT, причем с переходом на летнее время оно естественно не меняется, а GetLocalTime для Москвы зимой дает GMT+3, а летом GMT+4.
← →
gydvin (2005-06-24 14:18) [11]гы-гы а ты все заполни только че попробывал все меняет
← →
Леша (2005-06-24 14:18) [12]Как получить я знаю.
Я бьюся над тем сейчас, чтобы можно было изменить системную дату.
← →
gydvin (2005-06-24 14:20) [13]до сих пор дату в норму привожу
← →
Леша (2005-06-24 14:24) [14]Действительно, если все заполнить меняет. Но мне не нужно время менять. Щас буду думать.
← →
begin...end © (2005-06-24 14:34) [15]> Леша (24.06.05 14:12) [8]
Тёзка, Вы поля "час", "минута" и т.д. в структуре _SystemTime заполняли? Нет. Значит, в этих полях может находиться всё, что угодно (локальные переменные сами не инициализируются). И потом Вы пытаетесь это "всё, что угодно" передать в SetSystemTime, после чего даже не проверяете результат, который она возвращает. Чтобы узнать, в чём дело, можно строкуSetSystemTime(d)
заменить наWin32Check(SetSystemTime(d))
. Скорее всего, появится сообщение об ошибке "Неверный параметр", что и подтверждает вышесказанное.
Отсюда вывод -- надо полностью инициализировать структуру _SystemTime. Например, так можно увеличить на единицу год:var
D: TSystemTime;
begin
GetSystemTime(D);
Inc(D.wYear);
Win32Check(SetSystemTime(D))
end.
> Леша (24.06.05 14:24) [14]
А если не надо время менять, то нужно его оставить, как есть. А для этого нужно его сначала получить. А как -- см. код выше.
← →
Леша (2005-06-24 14:34) [16]Сделал так. Все, дату меняет, но не понятно почему трогает значение часов.
procedure TForm1.Button1Click(Sender: TObject);
var
d:_systemtime;
Hour, Min, Sec, MSec: Word;
begin
DecodeTime(now, Hour, Min, Sec, MSec);
d.wYear:=2005;
d.wMonth:=06;
d.wDay:=10;
d.wHour:=Hour;
d.wMinute:=Min;
d.wSecond:=Sec;
d.wMilliseconds:=MSec;
SetSystemTime(d);
Form1.Caption:=DateToStr(now);
end;
← →
Леша (2005-06-24 14:37) [17]begin..end
Спасибо за разъяснение.
← →
begin...end © (2005-06-24 14:40) [18]> Леша (24.06.05 14:34) [16]
> не понятно почему трогает значение часов
Потому что Now для получения даты/времени использует не GetSystemTime, а GetLocalTime.
А чем эти две функции отличаются, уже сказали в предыдущих постах.
← →
Anatoly Podgoretsky © (2005-06-24 14:47) [19]Не трожь системное время.
← →
Леша (2005-06-24 14:50) [20]Anatoly Podgoretsky - не понял??? Да мне и не нужно его трогать. Мне нужно дату поменять.
А значения нужно все заполнять...иначе не меняется дата, а значит заполнять нужно и значения времени...
← →
Anatoly Podgoretsky © (2005-06-24 14:57) [21]Это системная привелегия, можно получить по полной за подобное.
← →
Леша (2005-06-24 14:57) [22]Не знаю на сколько грамотно написан код, но вот конечный результат. Похоже все работает (т.е. глюков пока не обнаружено).
procedure TForm1.Button1Click(Sender: TObject);
var
d:_systemtime;
k:_systemtime;
Hour, Min, Sec, MSec: Word;
begin
GetSystemTime(K);
d.wYear:=2005;
d.wMonth:=06;
d.wDay:=10;
d.wHour:=K.wHour;
d.wMinute:=K.wMinute;
d.wSecond:=K.wSecond;
d.wMilliseconds:=K.wMilliseconds;
SetSystemTime(d);
Form1.Caption:=DateToStr(now);
end;
← →
gydvin (2005-06-24 15:01) [23]Лишь бы работало
вроде верно
← →
evvcom © (2005-06-24 15:01) [24]GetSystemTime(K);
K.wYear:=2005;
K.wMonth:=06;
K.wDay:=10;
SetSystemTime(K);
← →
begin...end © (2005-06-24 15:06) [25]> Леша (24.06.05 14:57) [22]
procedure TForm1.Button1Click(Sender: TObject);
var
D: _SystemTime;
begin
GetSystemTime(D);
// Теперь все поля в D заполнены текущими датой и временем
// Поэтому осталось поменять только то, что нужно (год, месяц и день)
// и передать изменённую структуру в SetSystemTime, не забыв про проверку на ошибки
D.wYear := ...;
D.wMonth := ...;
D.wDay := ...;
Win32Check(SetSystemTime(D));
Form1.Caption := DateToStr(Now)
end.
← →
Леша (2005-06-24 15:10) [26]begin...end - правильно и круто. Понял ошибки...у меня избыточный код. Сейчас переделаю...
← →
Леша (2005-06-24 15:12) [27]Огромное всем спасибо. Сейчас это уже и не кажется проблемой... а сначала было сложно и непонятно...
Еще раз всем спасибо.
Страницы: 1 вся ветка
Текущий архив: 2005.07.11;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.048 c