Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Установка даты, Как? Как? Как? 
:(
    Опции темы
SkilFul
  Дата 17.11.2004, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.5.2004

Репутация: нет
Всего: 1



ПОМОГИТЕ!!! Все нервы уже извел с установкой даты ...
Напишите, кто может процедурку, чтобы меняла дату TDate без учета времени ... Или с учетом, но чтобы небуло косяков: Например в этой процеДУРЕ если установить дату, которая находится не в данном часовом поясе (лето - зима), то она неправильно выставляет время:
Если у вас стоит допустим 17 ноября, то если воспользоваться этой процедурой напишем дату 9.10.2004 (так как она требует еще и время, вставим текущее (decode(time и тд))).
Дата выставиться правильно, а время прибавиться на один час! (хотя вроде должно убавляться). А если сделать наоборот тоесть у вас 9.10.2004, а нужно поставить 17.11.2004, то дата меняется, а время остается прежним, хотя должно прибавляться ...
Код

function SetPCSystemTime(tDati: TDateTime): Boolean;
var
tSetDati: TDateTime;
vDatiBias: Variant;
tTZI: TTimeZoneInformation;  
tST: TSystemTime;  

begin
GetTimeZoneInformation(tTZI);
vDatiBias := tTZI.Bias / 1440;
tSetDati := tDati + vDatiBias;  

with tST do  
begin  
wYear := StrToInt(FormatDateTime('yyyy', tSetDati));  
wMonth := StrToInt(FormatDateTime('mm', tSetDati));
wDay := StrToInt(FormatDateTime('dd', tSetDati));
wHour := StrToInt(FormatDateTime('hh', tSetDati));
wMinute := StrToInt(FormatDateTime('nn', tSetDati));
wSecond := StrToInt(FormatDateTime('ss', tSetDati));
wMilliseconds := 0;  
end;  

SetPCSystemTime := SetSystemTime(tST);  

 
end;



Тоже самое и с этой процедурой:
Код

procedure TfmTime.btnTimeClick(Sender: TObject);  
var vsys : _SYSTEMTIME;  
vYear, vMonth, vDay, vHour, vMin, vSec, vMm : Word;  
begin  
DecodeDate( Trunc(dtpDate.Date), vYear, vMonth, vDay );
DecodeTime( dtpTime.Time, vHour, vMin, vSec, vMm );  
vMm := 0;  
vsys.wYear := vYear;  
vsys.wMonth := vMonth;  
vsys.wDay := vDay;  
vsys.wHour := ( vHour - 5 );   // разница с гринвичем
vsys.wMinute := vMin;  
vsys.wSecond := vSec;  
vsys.wMilliseconds := vMm;  
vsys.wDayOfWeek := DayOfWeek( Trunc(dtpDate.Date) );  

SetSystemTime( vsys );  

 
end;



А вот эта процедура мне очень подходит, но она в последней срочке почемуто выдает ошибку:
Код

Procedure setdate(Year : word; Month, Day : byte); assembler;
asm
mov cx, year  
mov dh, month  
mov dl, day  
mov ah, $2b  
int $21   // вот в этой строчке происходит ошибка
end;  



Дак кто нибудь знает правильную процедуру?
PM MAIL   Вверх
Guest
Дата 17.11.2004, 21:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А ты не пробовал поменять типа вместо DateTime поставить Date? по идее должно работать и получится у тебя чтото вроде этого:
Код

function SetPCSystemTime(tDati: TDate): Boolean;
var
tSetDati: TDate;
vDatiBias: Variant;
tTZI: TTimeZoneInformation;  
tST: TSystemTime;  

begin
GetTimeZoneInformation(tTZI);
vDatiBias := tTZI.Bias / 1440;
tSetDati := tDati + vDatiBias;  

with tST do  
begin  
wYear := StrToInt(FormatDateTime('yyyy', tSetDati));  
wMonth := StrToInt(FormatDateTime('mm', tSetDati));
wDay := StrToInt(FormatDateTime('dd', tSetDati));
wHour := StrToInt(FormatDateTime('hh', tSetDati));
wMinute := StrToInt(FormatDateTime('nn', tSetDati));
wSecond := StrToInt(FormatDateTime('ss', tSetDati));
wMilliseconds := 0;  
end;  

SetPCSystemTime := SetSystemTime(tST);  


end;

  Вверх
Zero
Дата 17.11.2004, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Держи самый простой из способов: smile
Код

Label1.Caption:=DateToStr(time);  //Выдаст тебе дату
Label2.Caption:=TimeToStr(time);  //Навсякий пожарный, для времени
Label3.Caption:=DateTimeToStr(time);  //Всё вместе

Если воткнёш эти штуки, в компонент Timer с интервалом в 1000, то постоянно будет отображатся время.

А если хочешь менять дату, то
Код

Label1.Caption:=DateToStr(time+2);  //Выдаст тебе текущую дату +2 дня
Label2.Caption:=TimeToStr(time+strtotime('1:02'));  //на 1 час и 2 менуты больше


Это сообщение отредактировал(а) Zero - 17.11.2004, 23:30
PM MAIL ICQ   Вверх
SkilFul
  Дата 18.11.2004, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.5.2004

Репутация: нет
Всего: 1



Цитата
Guest 
Дата 17.11.2004, 21:36
Unregistered

А ты не пробовал поменять типа вместо DateTime поставить Date? по идее должно работать и получится у тебя чтото вроде этого:


Нет, так не работает! время обнуляется ...


Цитата
Zero Дата 17.11.2004, 23:19
  Держи самый простой из способов: 


Все это я знаю, ты меня паходу не понял ... (читай мой первый вопрос ...)

А если ты мне хотел сказать, как время прибавлять, я это тоже умею ... Только вот когда и сколько? Я хочу чтобы работало в общем случае с любыми TimeZone ...

Ну? так кто нибудь знает как это делается???

Хотябы обьясните, почему делается ошибка: smile
Код

Procedure setdate(Year : word; Month, Day : byte); assembler;
asm
mov cx, year  
mov dh, month  
mov dl, day  
mov ah, $2b  
int $21   // вот в этой строчке происходит ошибка
end;  


Жду и надеюсь ... smile
PM MAIL   Вверх
SkilFul
Дата 18.11.2004, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.5.2004

Репутация: нет
Всего: 1



Ладно, раз как правильно дату меянять никто не знает, тогда хоть скажите, как можно включать/отключать автоматический переход на летнее и зимнее время - ведь вся эта бадяга из-за него ...
PM MAIL   Вверх
Zero
Дата 18.11.2004, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата
тогда хоть скажите, как можно включать/отключать автоматический переход на летнее и зимнее время

Нажми: Панель управления\Дата и время\Часовой пояс (Вкладка)\Сними галку (переход на летнее время)

Это сообщение отредактировал(а) Zero - 18.11.2004, 18:20
PM MAIL ICQ   Вверх
SkilFul
Дата 18.11.2004, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.5.2004

Репутация: нет
Всего: 1



smile прикалол ...
А из Delphi как?
PM MAIL   Вверх
Zero
Дата 18.11.2004, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Х.З. smile
PM MAIL ICQ   Вверх
Alex
Дата 18.11.2004, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Раздел в реестре HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

Если есть ключ "DisableAutoDaylightTimeSet"=dword:00000001, то переход отменен.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0835 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.