Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1160471759
regdown
2006-10-10 13:15
2006.11.19
Вопрос Файл Delphi7


15-1162534780
strannik
2006-11-03 09:19
2006.11.19
а софтик то нужен только для личного пользования.


2-1162719974
Shiziks
2006-11-05 12:46
2006.11.19
Ошибка IB


11-1139132248
homm
2006-02-05 12:37
2006.11.19
Хранение двоичных данных(файла) в *.dfm


2-1162373363
JTAG
2006-11-01 12:29
2006.11.19
Господа подскажите плз как узнать открыт ли файл?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский