Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Вниз

Изменение ситемной даты   Найти похожие ветки 

 
Леша   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.033 c
14-1118177953
Cerberus
2005-06-08 00:59
2005.07.11
Что можно добавить?


1-1118440727
KOLIG
2005-06-11 01:58
2005.07.11
Открытие каталогов


4-1116082031
TForm1
2005-05-14 18:47
2005.07.11
Запуск внутри...


14-1118152509
Valera
2005-06-07 17:55
2005.07.11
карта


14-1118376395
Stocker
2005-06-10 08:06
2005.07.11
Документация по Installshield 3.х настройка альяса BDE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский