Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.53 MB
Время: 0.561 c
1-1118734469
Aldor
2005-06-14 11:34
2005.07.11
KEY_ALL_ACCESS и какой-то SYNCHRONIZE


1-1118397949
A№t0№
2005-06-10 14:05
2005.07.11
В конец RichEdit


1-1119437436
sergg
2005-06-22 14:50
2005.07.11
Являются ли данные датой?


3-1117645602
Shuric
2005-06-01 21:06
2005.07.11
Oracle через ODBC


14-1118379504
boriskb
2005-06-10 08:58
2005.07.11
Есть желающие прокоментировать?