Форум: "Начинающим";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
ВнизКак получиьт разницу времени локального и 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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.045 c