Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.19;
Скачать: CL | DM;

Вниз

Как получиьт разницу времени локального и GMT   Найти похожие ветки 

 
Still Swamp   (2006-10-30 13:11) [0]

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


 
Правильный Вася   (2006-10-30 13:15) [1]

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


 
Anatoly Podgoretsky ©   (2006-10-30 13:18) [2]

Преобразовать местное в UTC, преобразовать GMT в UTC, затем операция вычитания.


 
Still Swamp   (2006-10-30 13:23) [3]

Ок. Про столб я помолчу...

Если можно, как местное преобразовать в UTC?


 
Still Swamp   (2006-10-30 13:35) [4]

Все нашел .... GetTimeZoneInformation. SystemTimeToTzSpecificLocalTime.
А про столб - позабавило.


 
Anatoly Podgoretsky ©   (2006-10-30 14:57) [5]

Просто вместо GetLocalTime используй GetSystemTime
и вторую функцию ты нашел, с ее помощью и преобразуешь в специфическую зону..

Меня вообще то всегда удивляет любовь к GMT применения этому не вижу.


 
Still Swamp   (2006-10-31 18:05) [6]

У меня есть сервер, который проводит расчеты в GMT. Есть клиенты которые сидят в разных часовых поясах и у каждго свое время. Синхронизировать и хранить данные нужно их всех в одном времени, а вот показывать клиентам и принимать от них ввод необходимо в их локальном. Вот и все.


 
Anatoly Podgoretsky ©   (2006-10-31 18:24) [7]

Это одно время называется UT, а не GMT


 
Anatoly Podgoretsky ©   (2006-10-31 19:06) [8]

> Anatoly Podgoretsky  (31.10.2006 18:24:07)  [7]

И никаких разниц получать не надо!


 
Still Swamp   (2006-10-31 19:14) [9]

Э нет... секунду. Во первых.... Базой данных я не рулю, а там именно GMT записанное в аналог TDataTime.

Далее, если бы даже мне взбрело бы в голову переписывать базу на UT, то елси я не ошибаюся UT - это вот...
typedef struct _SYSTEMTIME {  // st  
   WORD wYear;
   WORD wMonth;
   WORD wDayOfWeek;
   WORD wDay;
   WORD wHour;
   WORD wMinute;
   WORD wSecond;
   WORD wMilliseconds;
} SYSTEMTIME;

Я тут не вижу времени точнее милисекунд. Вероятность появления записей с одним и тем же временем очень сильно велика. TDateTime таковой практически вообще не допускает.


 
Anatoly Podgoretsky ©   (2006-10-31 20:07) [10]

> Still Swamp  (31.10.2006 19:14:09)  [9]

Не ошибаешься, ну немного - это общая структура и для LocalTime, и для
SystemTime и для для любых других Time


 
Still Swamp   (2006-10-31 20:32) [11]

Ну таки вот... по вышеперечисленным причинам это не подходит


 
Anatoly Podgoretsky ©   (2006-10-31 20:35) [12]

> Still Swamp  (31.10.2006 20:32:11)  [11]

Есть функции перевода из одного формат в другой, но я не о формате хранения,
я про время, никак не могу сообразить зачем нужен GMT, когда весь мир
работает по универсальному времени?


 
Still Swamp   (2006-10-31 21:14) [13]

В споре истина рождается.

Ну грубо говоря у меня есть нечто (база) что мне отдает данные в GMT:TDateTime. Я естно все offline данные лежащие на клиенте складываю в том же формате не преобразуя. Это логично не так ли? Причина проста. Я не желаю преобразовывать принятые данные и записывать в иной формат так как в этом случае я ставлю своего клиента в зависимость от часов на машине которые могут козлить... а так что принял то и сохранил.

И так я на клиенте имею GMT, который клиенту выводить не халяльно. Я беру и преобразую его в локальное время. Все. Какое тут место для UTC? Зачем плодить лишние сущности?

При этом стоит учесть что UTC -> TDateTime = однозначная потеря точности менее милисеков.


 
@!!ex ©   (2006-10-31 21:38) [14]

1) UTC != TDataTime UTС - стандарт времени, TDataTime - способ хранения времени. Единственно просто доступный, кстати.
2) TDataTime=double большей точности нет.


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

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

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.


 
@!!ex ©   (2006-10-31 22:25) [16]


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

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


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

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


 
Anatoly Podgoretsky ©   (2006-10-31 23:26) [18]

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

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


 
Anatoly Podgoretsky ©   (2006-10-31 23:27) [19]

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


 
Anatoly Podgoretsky ©   (2006-10-31 23:29) [20]

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

Чего, чего.

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


 
Anatoly Podgoretsky ©   (2006-10-31 23:29) [21]

> 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:34) [22]

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

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

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

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


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

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

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


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

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

Теряется!


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

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

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


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


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


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


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

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

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


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

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

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


 
Anatoly Podgoretsky ©   (2006-11-01 14:20) [29]

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

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


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

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

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

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


 
Anatoly Podgoretsky ©   (2006-11-01 15:34) [31]

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

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


 
Anatoly Podgoretsky ©   (2006-11-01 15:38) [32]

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

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


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


> Anatoly Podgoretsky  [30]


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


 
Anatoly Podgoretsky ©   (2006-11-01 16:16) [34]

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.11.19;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.031 c
2-1162736465
Student2007
2006-11-05 17:21
2006.11.19
Убрать границы после использования Rectagle


15-1162546558
Ламот
2006-11-03 12:35
2006.11.19
Win2000 Server и планировщик заданий


6-1148193053
Maxim13
2006-05-21 10:30
2006.11.19
Подскажите как открыть доступ к определеной папке?


6-1148946937
nikitian
2006-05-30 03:55
2006.11.19
Проблема с кодировкой в indySMTP


15-1162217711
Lexer
2006-10-30 17:15
2006.11.19
Проблема с сетью WIFI