Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получиьт разницу времени локального и GMT [D7, WinXP]


Страницы:   1 2

Still Swamp ©   (2006-10-30 13:11:00) 

Как получиьт разницу времени локального и GMT? Вариант Now-NowGMT не предлагать.


Anatoly Podgoretsky   (2006-11-01 16:16:00) [1]

> Still Swamp  (01.11.2006 15:40:33)  [33]

> так как сервер работает по GMT=UTC

Это не возможно по определению, что то из них не то, то ли GMT не GMT, то ли
UTC не UTC


Still Swamp   (2006-11-01 15:40:00) [2]


> Anatoly Podgoretsky  [30]


А GMT=UTC так как сервер работает по GMT=UTC .... в моем случае. Скажем так, весь нашь сыр бор приключился из за моего незнания что такое UTC, и вашего непризнания что перевод режет точность.


Anatoly Podgoretsky   (2006-11-01 15:38:00) [3]

> Still Swamp  (01.11.2006 15:26:30)  [30]

Про точность интересно, тебя уже спрашивали, где ты ее умудряешься потерять,
у типа Double точность 15 знаков, у SYSTEMTIME меньше, но Double получается
преобразованием из SYSTEMTIME, у тебя что Double точнее SYSTEMTIME? Тогда в
точку такое время


Anatoly Podgoretsky   (2006-11-01 15:34:00) [4]

> Still Swamp  (01.11.2006 15:26:30)  [30]

Частный случай, откуда ты уверен, что полученный GMT равен текущему UTC
Делаешь запросы к ОС, к достаточно сложным функциям, куча работы.
Общий случай GMT <> UTC, вероятность равна 50%


Still Swamp   (2006-11-01 15:26:00) [5]

У нас непонятки в беседе.
1. Я получаю GMT - в общем случае равное UTC.
2. Храню на клиенте я его же.
3. При выводе-вводе клиента я использую конверт не через SystemTimeToDateTime а прочитав из TIME_ZONE_INFORMATION.BAIS смещенеи и изменив на его значение исходный DataTime именно для того что бы не потерять точность.

Вроде бы значит я использую UTC = GMT, но при этом не пользуюсь стандартными функциями конвертации.

На этом думаю остановимся. :)


Anatoly Podgoretsky   (2006-11-01 14:20:00) [6]

Ну так и передается один формат, а возвращается другой, нет ни каких проблем с преобразованием форматов.

Проблема не с форматами, а с понятиями - GMT это LocalTime, а не SystemTime.
Вот SystemTime у всех людей одинаков, а GMT зависит и от времени года и не подходит к использованию для указаной тобой цели, можно конечно делать лишнии преобразования, а можно использовать LocalTime и SystemTime


Still Swamp   (2006-11-01 14:03:00) [7]

Таки а тогда на сколько я понял не имеет значения как это называть. Ко мне приходит GMT. Так и пусть оно таковым остается. Что собстно я и сделал.

К статаи, конверты таки подпортят шкурку.
function SystemTimeToDateTime(const SystemTime: TSystemTime): TDateTime;
TSystemTime - это не дабл а структура.


Anatoly Podgoretsky   (2006-11-01 13:00:00) [8]

> Still Swamp  (01.11.2006 12:31:26)  [26]

Так и думал, ты путаешь время с хранением, кто тебя заставляет хранить в
SYSTEMTIME, это же относится и к LocalTime, и к GMT (которое по сути
LocalTime, как и МСК). В Дельфи для это принять использовать TDateTime


Still Swamp   (2006-11-01 12:31:00) [9]


> Ты уже несколько раз пишешь про тип UTC я теряюсь в догадках,
>  что за тип
> такой.
> Расскажи в паре слов.


Coordinated Universal Time (UTC).
Описывается в структуре SYSTEMTIME


Anatoly Podgoretsky   (2006-11-01 10:28:00) [10]

> Still Swamp  (01.11.2006 10:17:24)  [24]

Ты уже несколько раз пишешь про тип UTC я теряюсь в догадках, что за тип
такой.
Расскажи в паре слов.


Still Swamp   (2006-11-01 10:17:00) [11]

Извиняюсь, дурь раписал про знаки (поздно было уже), точно такую же как и то что при переводе Double -> UTS ->Double не теряется точночть.

Теряется!


Anatoly Podgoretsky   (2006-10-31 23:37:00) [12]

> Вы что издеваетесь что ли коллективно...?

Нет это над нами издеваются, хочат коллективного дурачка сделать.


Anatoly Podgoretsky   (2006-10-31 23:34:00) [13]

> Still Swamp  (31.10.2006 22:04:15)  [15]

> Куда по вашему девается 317 десятых знака при записи в UTC.

Ты что не знаком с форматом чисел с плавающей запятой?

Тебе нобелевку надо давать за 325 десятичных знака в 8 байтах.


Anatoly Podgoretsky   (2006-10-31 23:29:00) [14]

> Anatoly Podgoretsky  (31.10.2006 23:26:18)  [18]

> Какое тут место для UTC? Зачем плодить лишние сущности?

Какое тут место для GMT? Зачем плодить лишние сущности?

GMT -> UTC -> Local
Local -> UTC -> GMT

При этом UTC -> Local и  Local -> UTC делаются на уровне системы, без лишних
сущностей, без одной лишней перекодировки.


Anatoly Podgoretsky   (2006-10-31 23:29:00) [15]

> Anatoly Podgoretsky  (31.10.2006 23:26:18)  [18]

Чего, чего.

Нет ничего проще времени и нет ничего сложнее времени, особенно для
программиста, который придумывает свои теории о нем.


Anatoly Podgoretsky   (2006-10-31 23:27:00) [16]

Удалено модератором


Anatoly Podgoretsky   (2006-10-31 23:26:00) [17]

Anatoly Podgoretsky ©   (31.10.06 23:23) [1]
> Anatoly Podgoretsky  (31.10.2006 23:21:00)  [0]

Безнадега, UTC/GMT/Local хранятся в одном формате, куда у тебя теряется
точность?


Still Swamp   (2006-10-31 22:57:00) [18]

Тип секретный есть конечно... Extended. 10байт. Это так, на всяк случай, но в моем случае GMT хранится в Double. Беда в том что UТC не хватает точности не из за длинны самой структуры а из за способа хранения. Таки попробуйте на форму воткнуть вышеприведенный текст и надесь этот спор закончится. Тем более проблема уже решена.


@!!ex   (2006-10-31 22:25:00) [19]


> Still Swamp   (31.10.06 22:04) [15]

А как ви храните GMT?
Есть секретный тип большие чем 8 байт? ;)


Still Swamp   (2006-10-31 22:04:00) [20]

Вы что издеваетесь что ли коллективно...?

TDateTime=double. Это так.
1.0 = 1 сутки.
1/86400000 =0.8e-8 = количество милисеков в сутках, а точность Double 1e- 0.1^-325
Куда по вашему девается 317 десятых знака при записи в UTC.
К стати... напишите:

procedure TForm1.Button1Click(Sender: TObject);
var
d1:double;
d2:double;
c:TSYSTEMTIME;
begin
d1:=now+1.0e-10; // Как раз что бы точность прочувствовать
DateTimeToSystemTime(d1, c);
d2:=SystemTimeToDateTime(c);
ShowMessage(FloatToStr(d1-d2));
end;

Eсли у вас сколь нить серьезное железо отличное от ширпотреба, то расслабтесь с UTC.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо