Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
ВнизTIME_ZONE, или как определить сторону света. Найти похожие ветки
← →
mfender (2003-09-09 04:05) [0]Как вычислить разницу локального и системного времени особого ума не надо. А вот как постичь, с какой стороны эта разница? На западе, или на востоке от Лондона...
Вобщем, существует ли где-то в системе (наверняка есть) такой определитель, чтобы сразу стало ясно, что разница, к примеру, 3 часа равна -3, т.е. где-то в районе Канады, а не в СПБ.
Вот такой коварный вопрос.
← →
[lamer]Barmaglot (2003-09-09 09:50) [1]GetTimeZoneInformation ?
← →
mfender (2003-09-09 13:53) [2]А как бы им воспользоваться, и что там есть что?
typedef struct _TIME_ZONE_INFORMATION { // tzi
LONG Bias;
WCHAR StandardName[ 32 ];
SYSTEMTIME StandardDate;
LONG StandardBias;
WCHAR DaylightName[ 32 ];
SYSTEMTIME DaylightDate;
LONG DaylightBias;
} TIME_ZONE_INFORMATION;
Что это?
← →
DmS (2003-09-09 13:55) [3]что именно надо узнать ?
← →
mfender (2003-09-09 14:02) [4]Нужно узнать, в какую сторону от нулевого меридиана лежит искомая TimeZone.
SystemTimeToDateTime(GetLocalTime(SYSTEMTIME))-SystemTimeToDateTime(GetSystemTime(SYSTEMTIME)) дает всегда правильный, но положительный результат (видимо, потому что время не может быть отрицательным. А нужно знать, правильные цифры. Т.е. если на восточном побережье США -5 часов разница, то хотелось бы видеть именно -5 часов разницы, а не 5.
← →
DmS (2003-09-09 14:04) [5]тогда делай по другому: преобразуй оба времени в TDateTime и вычитай на здоровье.
← →
han_malign (2003-09-09 14:21) [6]>дает всегда правильный, но положительный результат
- гоните батенька, GMT: -12..+13, а TDateTime бывает и отрицательный(например 01.01.998 12:31:17).
З.Ы. А еще летнее/зимнее время есть... :p
← →
mfender (2003-09-09 14:21) [7]Я так и написал:
SystemTimeToDateTime(GetLocalTime(SYSTEMTIME))-SystemTimeToDateTime(GetSystemTime(SYSTEMTIME))
Разница-то всегда положительная. А вокруг нулевого меридиана таймзоны находятся в диапазоне от -12 до +12 часов. Так вот как вычислить, положительная или отрицательная разница?
← →
mfender (2003-09-09 14:23) [8]>TDateTime бывает и отрицательный(например 01.01.998 12:31:17).
И чего же тут отрицательного?
← →
[lamer]Barmaglot (2003-09-09 14:59) [9]Пользуйся Windows"кими функциями. Они надежнее чем личные расчеты...
Приблизительно так:
procedure TForm1.Button1Click(Sender: TObject);
var
timezone, Timezone1: _Time_Zone_Information;
t, t1: SystemTime;
begin
GetTimeZoneInformation(TimeZone);
Edit1.text:=inttostr(Timezone.Bias);
end;
Получаем разницу между нашим и гринвическим временем в минутах. Если установить (SetTimeZoneInformation) отличным от этого, то при вызове GetLocalTime получишь другое время... Вообщем поэкспериментируй...
← →
mfender (2003-09-09 15:11) [10]Получилось, но вот какая интересная штука. Сам попробуй:
procedure TForm1.Button1Click(Sender: TObject);
var st, lt: TSYSTEMTIME;
TZ: _TIME_ZONE_INFORMATION;
begin
GetSystemTime(st);
GetLocalTime(lt);
GetTimeZoneInformation(TZ);
ShowMessage("Разница между локальным и системным временем: "
+FormatDateTime("h",SystemTimeToDateTime(lt)-SystemTimeToDateTime(st))+" часа,"
+#10#13+"а разница TimeZone.Bias: "+IntToStr(TZ.Bias div 60)+" часа.");
end;
Почему такая порча?
← →
mfender (2003-09-09 15:17) [11]Пораскинув мозгами, попробую сам ответить. Очевидно это из-за того, что разница локального и системного времени после осеннего солнцестояния (21 сентября) станет равной bias"у, т.к. будет случиться перход на зимнее время (читай - нормальное). А в Bias"е прописана фиксированная разница, та, которую я сам указал при установке системы. Правильно?
← →
DmS (2003-09-09 15:22) [12]я в шоке !!!
автор ! читай про TDateTime ! твои вопросы отпадут сами собой !
← →
han_malign (2003-09-09 15:22) [13]ну родной...
>FormatDateTime("h",SystemTimeToDateTime(lt)-SystemTimeToDateTime(st))+" часа,"
(SystemTimeToDateTime(lt)-SystemTimeToDateTime(st)) это для FormatDateTime - 01.01.1900 04:00:00
The integral part of a Delphi TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of the TDateTime value is fraction of a 24 hour day that has elapsed.
Following are some examples of TDateTime values and their corresponding dates and times:
0 12/30/1899 12:00 am
2.75 1/1/1900 6:00 pm
-1.25 12/29/1899 6:00 am
35065 1/1/1996 12:00 am
а я еще думаю где это он дату потерял.
IntToStr(round((SystemTimeToDateTime(lt)-SystemTimeToDateTime(st))*24)) - "спасут отца русской демократии"
← →
[lamer]Barmaglot (2003-09-09 15:22) [14]Tz.DaylightBias ?
← →
mfender (2003-09-09 15:40) [15]Ок. Спасибо всем. Очень познавательно. Углубляюсь в изучение SDK.
← →
DmS (2003-09-09 15:47) [16]
var
t1, t2 : _SYSTEMTIME;
td1, td2 : TDateTime;
...
GetSystemTime(t1);
GetLocalTime(t2);
td1:=SystemTimeToDateTime(t1);
td2:=SystemTimeToDateTime(t2);
if td1 < td2 then
MessageDlg("мы на востоке", mtInformation, [mbOk], 0)
else
MessageDlg("мы на западе", mtInformation, [mbOk], 0);
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c