![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получиьт разницу времени локального и GMT [D7, WinXP]
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.