SASGIS - SAS.Планета
View Issue Details
0001090SAS.Планета[All Projects] Багpublic29-12-2011 17:5624-01-2021 13:15
DJ VK 
zed 
normalminoralways
resolvedfixed 
Windows7Ultimate
110418 
131111131111 
0001090: Неправильно отображается время для России и Беларуси
В операционной системе выбран 4й часовой пояс. Без переходов на летне-зимнее время. Отображается на час меньше в программе. Можно конечно пропатчить винду, чтобы Москва стала в системе в 4м поясе, но ведь глюк то есть. Программа игнорирует выбранный пояс почему-то.
время
has duplicate 0001118closed Tolik Ошибка в часовых поясах 
has duplicate 0001192closed Tolik Неправильно отображается время для Беларуси 
related to 0000131resolved zed Неправильно отображается время для Узбекистана 
related to 0001704resolved zed Спрятать старый код определния тайм-зон в TimeZone.dll 
related to 0001529resolved zed Часы в строке статуса не учитывают переход на летнее время 
csv 3.csv (9,377) 28-02-2012 15:00
https://bugtracker.sasgis.org/file_download.php?file_id=668&type=bug
? 3.kml (561,965) 28-02-2012 15:01
https://bugtracker.sasgis.org/file_download.php?file_id=669&type=bug
? TimeZones.kmz (257,403) 28-02-2012 15:02
https://bugtracker.sasgis.org/file_download.php?file_id=670&type=bug
? timezones.tz (102,006) 12-05-2012 06:14
https://bugtracker.sasgis.org/file_download.php?file_id=798&type=bug
? SASPlanet.Debug.Bug.1090.elf (38,571) 20-10-2012 19:32
https://bugtracker.sasgis.org/file_download.php?file_id=1114&type=bug
Issue History
29-12-2011 17:56DJ VKNew Issue
29-12-2011 18:46TolikStatusnew => acknowledged
29-12-2011 18:47TolikNote Added: 0004733
30-12-2011 04:40DJ VKNote Added: 0004739
30-12-2011 05:29TolikNote Added: 0004742
30-12-2011 09:46DJ VKNote Added: 0004743
30-12-2011 09:49DJ VKNote Edited: 0004743bug_revision_view_page.php?bugnote_id=4743#r2341
30-12-2011 09:49DJ VKNote Edited: 0004743bug_revision_view_page.php?bugnote_id=4743#r2342
03-01-2012 10:24gpsMaxTag Attached: время
17-01-2012 06:18TolikRelationship addedhas duplicate 0001118
17-01-2012 06:20TolikNote Added: 0005028
17-01-2012 06:22TolikNote Edited: 0005028bug_revision_view_page.php?bugnote_id=5028#r2510
17-01-2012 06:38TolikNote Added: 0005031
17-01-2012 06:49TolikNote Edited: 0005031bug_revision_view_page.php?bugnote_id=5031#r2514
17-01-2012 07:12TolikNote Edited: 0005031bug_revision_view_page.php?bugnote_id=5031#r2517
23-01-2012 11:17vdemidovProduct Version.Nightly => 110418
23-01-2012 11:17vdemidovTarget Version.Nightly => 29xxxx
23-01-2012 11:41vdemidovStatusacknowledged => confirmed
28-02-2012 07:16TolikRelationship addedrelated to 0000131
28-02-2012 07:45vdemidovTarget Version29xxxx => 40xxxx
28-02-2012 07:45vdemidovSummaryНекорректно отображается время => Неправильно отображается время в Москве
28-02-2012 07:46vdemidovSummaryНеправильно отображается время в Москве => Неправильно отображается время для Москвы
28-02-2012 09:24zedRelationship addedrelated to 0001192
28-02-2012 09:46TolikRelationship replacedhas duplicate 0001192
28-02-2012 09:48TolikSummaryНеправильно отображается время для Москвы => Неправильно отображается время для России и Беларуси.
28-02-2012 13:55TolikNote Added: 0005712
28-02-2012 14:10vdemidovNote Added: 0005713
28-02-2012 14:35TolikNote Added: 0005714
28-02-2012 15:00TolikNote Added: 0005715
28-02-2012 15:00TolikFile Added: 3.csv
28-02-2012 15:01TolikFile Added: 3.kml
28-02-2012 15:02TolikFile Added: TimeZones.kmz
28-02-2012 15:02TolikNote Edited: 0005715bug_revision_view_page.php?bugnote_id=5715#r2877
28-02-2012 15:58zedNote Added: 0005716
28-02-2012 16:03vdemidovNote Added: 0005717
28-02-2012 16:29zedNote Added: 0005719
28-02-2012 17:09zedNote Edited: 0005719bug_revision_view_page.php?bugnote_id=5719#r2879
28-02-2012 17:20TolikNote Added: 0005720
28-02-2012 17:25TolikNote Added: 0005721
28-02-2012 17:44zedNote Added: 0005722
28-02-2012 17:58TolikNote Added: 0005723
28-02-2012 17:59TolikNote Edited: 0005723bug_revision_view_page.php?bugnote_id=5723#r2881
28-02-2012 18:06zedNote Added: 0005724
28-02-2012 18:11TolikNote Added: 0005725
28-02-2012 18:16zedNote Added: 0005726
28-02-2012 18:16zedNote Edited: 0005726bug_revision_view_page.php?bugnote_id=5726#r2883
28-02-2012 18:20TolikNote Added: 0005727
28-02-2012 18:32TolikNote Added: 0005728
28-02-2012 18:34TolikNote Edited: 0005728bug_revision_view_page.php?bugnote_id=5728#r2885
28-02-2012 19:02zedNote Added: 0005729
28-02-2012 19:36zedNote Added: 0005730
29-02-2012 08:05vasketsovNote Added: 0005732
29-02-2012 12:54TolikNote Added: 0005752
01-03-2012 17:20zedNote Added: 0005772
04-05-2012 19:49zedNote Added: 0006670
12-05-2012 06:14zOnNote Added: 0006993
12-05-2012 06:14zOnFile Added: timezones.tz
12-05-2012 06:42zOnNote Edited: 0006993bug_revision_view_page.php?bugnote_id=6993#r3456
12-05-2012 18:33zedNote Added: 0007000
12-05-2012 20:02Dima2000Note Added: 0007001
14-09-2012 18:10gpsMaxSummaryНеправильно отображается время для России и Беларуси. => Неправильно отображается время для России и Беларуси
20-10-2012 14:01zedAssigned To => zed
20-10-2012 14:01zedStatusconfirmed => assigned
20-10-2012 14:07zedNote Added: 0009607
20-10-2012 16:04TolikNote Added: 0009610
20-10-2012 16:08TolikNote Edited: 0009610bug_revision_view_page.php?bugnote_id=9610#r4651
20-10-2012 16:32zedNote Added: 0009611
20-10-2012 16:59bk99Note Added: 0009612
20-10-2012 17:00zedFile Added: TimeZone_Compact_2.7z
20-10-2012 17:01zedFile Added: SASPlanet.Debug.Bug.1090.7z
20-10-2012 17:01zedFile Added: TimeZone_Full_2.7z
20-10-2012 17:20zedNote Added: 0009613
20-10-2012 18:26TolikNote Added: 0009614
20-10-2012 18:37zedNote Added: 0009615
20-10-2012 18:41TolikNote Added: 0009616
20-10-2012 18:44TolikNote Added: 0009617
20-10-2012 18:46TolikNote Edited: 0009617bug_revision_view_page.php?bugnote_id=9617#r4653
20-10-2012 18:51TolikNote Added: 0009618
20-10-2012 18:55TolikNote Edited: 0009618bug_revision_view_page.php?bugnote_id=9618#r4655
20-10-2012 18:55TolikNote Edited: 0009618bug_revision_view_page.php?bugnote_id=9618#r4656
20-10-2012 18:57TolikNote Edited: 0009617bug_revision_view_page.php?bugnote_id=9617#r4657
20-10-2012 19:07zedNote Added: 0009619
20-10-2012 19:13TolikNote Added: 0009620
20-10-2012 19:17TolikNote Edited: 0009620bug_revision_view_page.php?bugnote_id=9620#r4659
20-10-2012 19:32TolikFile Added: SASPlanet.Debug.Bug.1090.elf
20-10-2012 19:33TolikNote Added: 0009621
20-10-2012 19:34TolikNote Edited: 0009621bug_revision_view_page.php?bugnote_id=9621#r4661
20-10-2012 19:44TolikNote Edited: 0009614bug_revision_view_page.php?bugnote_id=9614#r4663
20-10-2012 21:21zedNote Added: 0009624
21-10-2012 04:08TolikNote Added: 0009625
21-10-2012 10:38zedFile Added: TimeZone.x1.7z
21-10-2012 10:38zedNote Added: 0009629
21-10-2012 11:24TolikNote Added: 0009630
21-10-2012 11:35zedNote Added: 0009631
21-10-2012 12:58zedNote Added: 0009633
21-10-2012 12:59zedFile Deleted: TimeZone_Compact_2.7z
21-10-2012 12:59zedFile Deleted: SASPlanet.Debug.Bug.1090.7z
21-10-2012 12:59zedFile Deleted: TimeZone_Full_2.7z
21-10-2012 12:59zedFile Deleted: TimeZone.x1.7z
21-10-2012 13:28TolikNote Added: 0009634
21-10-2012 13:31TolikNote Edited: 0009634bug_revision_view_page.php?bugnote_id=9634#r4670
21-10-2012 13:49TolikNote Added: 0009635
21-10-2012 13:54zedNote Added: 0009636
21-10-2012 14:54TolikNote Added: 0009638
21-10-2012 15:02zedNote Added: 0009639
21-10-2012 16:10zedNote Added: 0009641
21-10-2012 16:10zedStatusassigned => resolved
21-10-2012 16:10zedFixed in Version => 131111
21-10-2012 16:10zedResolutionopen => fixed
21-10-2012 16:10zedTarget Version40xxxx => 131111
21-10-2012 16:17TolikNote Added: 0009644
21-10-2012 16:18TolikNote Edited: 0009644bug_revision_view_page.php?bugnote_id=9644#r4672
21-10-2012 16:18zedNote Added: 0009645
22-10-2012 04:12TolikNote Added: 0009652
22-10-2012 07:56zedNote Added: 0009662
22-10-2012 07:58TolikNote Added: 0009663
23-11-2012 21:28zedRelationship addedrelated to 0001704
29-12-2012 12:04zedRelationship addedrelated to 0001529
30-12-2012 18:52TolikNote Edited: 0009631bug_revision_view_page.php?bugnote_id=9631#r5018
30-12-2012 18:53TolikNote Edited: 0009633bug_revision_view_page.php?bugnote_id=9633#r5020
19-05-2013 11:56zedNote Added: 0011402
24-01-2021 13:15zedNote Added: 0020047

Notes
(0004733)
Tolik   
29-12-2011 18:47   
И у меня на старой винде то же самое.
(0004739)
DJ VK   
30-12-2011 04:40   
проблема в том, что это время соответствующее географическому часовому поясу.
Тогда уж должна быть в 2 часа разница. У нас еще в 1930 году ЕРЖ сделали не как у всех. А в 2011 еще более мастистые ЕРЖ добавили еще 1 час опережения.

Вычисление времени вот такое сейчас.

function TLayerStatBar.GetTimeInLonLat(ALonLat: TDoublePoint): TDateTime;
var
  tz: TDateTime;
  st: TSystemTime;
begin
  tz := FTimeZoneDiff.GetTimeDiff(ALonLat);
  GetSystemTime(st);
  Result := EncodeTime(st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
  Result := Result + tz;
  Result := Frac(Result);
end;
(0004742)
Tolik   
30-12-2011 05:29   
Добавлю: и на новой пропатченной винде тоже неправильно показыввает. В Москве.

Ну а эта функция FTimeZoneDiff.GetTimeDiff() откуда берёт разницу во времени? Из какой-то таблицы? Типа, tzdata2011k.tar.gz?
(0004743)
DJ VK   
30-12-2011 09:46   
(edited on: 30-12-2011 09:49)
Да если бы.

unit u_TimeZoneDiffByLonLatStuped; - то есть примитивное вычисление

constructor TTimeZoneArea.Create(ASmallIntPolygon: Pointer; ALength: Integer);
var
  i: Integer;
begin
  FCount := ALength;
  SetLength(FPolygon, FCount);
  for i := 0 to FCount - 1 do begin
    FPolygon[i].X := SmallInt(Pointer(Integer(ASmallIntPolygon)+SizeOf(SmallInt)*2*i+SizeOf(SmallInt)*0)^)/100;
    FPolygon[i].Y := SmallInt(Pointer(Integer(ASmallIntPolygon)+SizeOf(SmallInt)*2*i+SizeOf(SmallInt)*1)^)/100;
  end;
end;

.....

  VAreaList := TInterfaceList.Create;
  VArea := TTimeZoneArea.Create(@timezone_3, length(timezone_3));
  VAreaList.Add(VArea);
  VArea := TTimeZoneArea.Create(@timezone_3_1, length(timezone_3_1));
  VAreaList.Add(VArea);
  VZone := TTimeZone.Create(3, VAreaList);
  FTimeZoneList.Add(VZone);


'timezone_3' = '(UTC +3:00) Moscow, Baghdad, Khartoum, Saint Petersburg';

unit c_TimeZones;

timezone_3:array [0..729,0..1]of smallint = (
(4279,3738),(4296,3732),(4315,3738),(4328,3732),(4336,3733),(4349,3725),(4379,3723),(4383,3720),(4391,3722),(4401,3732),(4412,3732),(4426,3724),(4427,3717),(4419,3710),(4426,3699),(4432,3697),(4435,3705),(4444,3706),(4464,3719),(4479,3715)...............
 значит надо править таблицу 3й зоны и 4й.
придется попотеть, если кто не скачает новую

(0005028)
Tolik   
17-01-2012 06:20   
(edited on: 17-01-2012 06:22)
Из бага 1118 (by bk99):

    В строке статуса отображается локальное время на территории, находящейся под курсором мыши. Известно, что Омск и Новосибирск находятся в одном часовом поясе (+3 часа с Москвой). В Планете же отображается разница с Москвой для Омска +3 часа (это верно), а для Новосибирска +4 часа (это ошибка).
   И ещё пожелание. В статусной строке отображать время в формате: "14:45:00(+6GMT)" (сейчас отображается просто: "14:45:00"). Или ещё проще: "14:45(+6GMT)" - без секунд.

(0005031)
Tolik   
17-01-2012 06:38   
(edited on: 17-01-2012 07:12)
Здесь есть 100320.kmz с координатами часовых поясов, но устаревший: http://bbs.keyhole.com/ubb/ubbthreads.php?ubb=showflat&Number=228782#Post228782

Если нет лучшего, я думаю, легче исправить устаревший, чем создавать новый.
А из него уж как-то и в код сконвертировать...

Здесь TimeZones.kmz, практически то же самое:
http://www.midlothian-isd.net/~tech_training/FOV1-00026E80/FOV1-0002F09D/FOV1-0002F0AD/

(0005712)
Tolik   
28-02-2012 13:55   
Скажите, а в каких единицах координаты точек в unit c_TimeZones?

Может кто-нибудь эти безумные массивы сконвертировать в формат kml и обратно?
Я мог бы тогда мог эти полигоны загрузить и исправить.

А вообще надо предусмотреть возможность редактировать их регулярно: таймзоны меняются по несколько раз в год.
(0005713)
vdemidov   
28-02-2012 14:10   
>Скажите, а в каких единицах координаты точек в unit c_TimeZones?
Это градусы умноженные на 100
>Может кто-нибудь эти безумные массивы сконвертировать в формат kml и обратно?
Может кто-то и может, но скорее всего готовых инструментов нет.
> вообще надо предусмотреть возможность редактировать их регулярно
Ваши предложения?
(0005714)
Tolik   
28-02-2012 14:35   
Предложение - написать скрипт, который эти массивы преобразует в kml и обратно.

Либо переписать программу так, чтобы она брала данные прямо из kml, но это труднее.

Инструмент, наверно, был, ведь кто-то не ручками вбивал эти цифры?
(0005715)
Tolik   
28-02-2012 15:00   
(edited on: 28-02-2012 15:02)
Я с помощью ворда и экселя сделал из "timezone_3:array [0..729,0..1]of smallint" файл 3.csv, запихнул в GPSBabel и получился 3.kml.
Он полностью совпадает с одним из кусков TimeZones.kmz (несколькими постами выше)!

Надо автоматизировать этот процесс, а главное, обратный (из kml в array).

Да, и ещё надо придумать, как редактировать kml :)

(0005716)
zed   
28-02-2012 15:58   
Нарыл интересный компонентик: http://code.google.com/p/delphi-tzdb/ берёт последние официальные данные по временным зонам (http://www.iana.org/time-zones).

Только, насколько я понял, там нет границ как таковых, а просто указаны страны/штаты/регионы и их временные зоны (причём, данные есть начиная чуть ли не с позапрошлого века). Т.е. в программе нужно хранить полигоны границ стран (которые меняются на порядок реже временных зон), по этим границам и координатам курсора вычислять название страны/региона, по которым и определять время и часовой пояс. А может там всё ещё проще и никакие границы хранить не нужно?
(0005717)
vdemidov   
28-02-2012 16:03   
Нет. Нужно где-то брать границы. В tzdb хранятся только названия зоны и инфа когда она действовала, разница во времени и есть ли переход на летнее время.
(0005719)
zed   
28-02-2012 16:29   
(edited on: 28-02-2012 17:09)
А вот и готовые границы: http://efele.net/maps/tz/

Только размер этих границ на порядок больше, чем сейчас в САСе. А если перегнать их в kml, так вообще 80 МБ выходит.

(0005720)
Tolik   
28-02-2012 17:20   
> нужно хранить полигоны границ стран
Только в некоторых странах несколько таймзон. И в одной из них они постоянно меняются...
(0005721)
Tolik   
28-02-2012 17:25   
> А если перегнать их в kml, так вообще 80 МБ выходит.
А как перегнать shape в kml?
Приаттачьте kml, пожалуйста.
Раз он такой большой, можно выкинуть половину (или 9/10) точек.
(0005722)
zed   
28-02-2012 17:44   
Перегоняется утилиткой shp2kml: http://www.zonums.com/shp2kml.html

KML тут: http://www.mediafire.com/?qxxdqpq48ov85u6

В принципе, сам shp файл хорошо сжимается (до 8Мб), плюс можно сконвертировать его в свой бинарный формат (типа *.stz - sas time zone), после что думаю, раза в 2 оно должно стать ещё компактнее. Но всё равно, размер будет соизмерим с размером релиза самого САС, что думаю, может стать принципиальным препятствием.
(0005723)
Tolik   
28-02-2012 17:58   
(edited on: 28-02-2012 17:59)
Спасибо.
В этом kml слишком много объектов: каждая страна выделена, их бы объединить - нет ли готового инструмента для этого?
Тогда очень много точек - границы стран в пределах одной таймзоны - будет удалено.

(0005724)
zed   
28-02-2012 18:06   
Их нельзя объединять. Каждому полигону соответствует свой TZID, зная который можно получить таймзону из tzdb.
(0005725)
Tolik   
28-02-2012 18:11   
Да, это было бы неплохо. И обновлять легко. Но слишком много точек - будет тормозить. Ну, тогда можно просто выкинуть часть точек. Какое число точек (или размер kml) ещё приемлемо?
Может написать сначала код для этого готового kml, посмотреть, насколько тормозит, а потом уж упрощать?
(0005726)
zed   
28-02-2012 18:16   
Вопрос скорее не в том, будет тормозить или нет (в этом плане можно придумать какие-нибудь оптимизации), а в собственно размере этих данных.
Да и выбрасывать что-то вручную - неблагодарное дело.

(0005727)
Tolik   
28-02-2012 18:20   
При конвертации в тот формат, что сейчас (целые числа = градусы*100) уже сократится раза в 4.
(0005728)
Tolik   
28-02-2012 18:32   
(edited on: 28-02-2012 18:34)
У этого файла ещё 1 недостаток: охвачена только суша, в морях никаких полигонов нет.

> Да и выбрасывать что-то вручную - неблагодарное дело.
Можно и не вручную: оставить каждую 3-ю (5-ю, 10-ю) точку, остальные отбросить.

(0005729)
zed   
28-02-2012 19:02   
Timezones at sea

The tz database says: “A ship within the territorial waters of any nation uses that nation's time. In international waters, time zone boundaries are meridians 15° apart, except that UTC−12 and UTC+12 are each 7.5° wide and are separated by the 180° meridian (not by the International Date Line, which is for land and territorial waters only). A captain can change ship's clocks any time after entering a new time zone; midnight changes are common.”

While the boundaries in international waters are not difficult to construct, the boundaries of territorial waters are a completely different story, and are similar to the boundaries between countries. Unfortunately, VMAP0 does not provide geometries for the territorial waters. As a consequence, the shapefiles presented here do not cover seas and oceans.
(0005730)
zed   
28-02-2012 19:36   
>При конвертации в тот формат, что сейчас (целые числа = градусы*100) уже сократится раза в 4.
Что ж, попробую написать конвертер из kml в бинарный формат, посмотрим насколько компактным оно получится.
(0005732)
vasketsov   
29-02-2012 08:05   
>размер будет соизмерим с размером релиза самого САС, что думаю, может стать принципиальным препятствием
А почему бы вообще не выкинуть это из релиза и не сделать как дополнительную опцию? Кому надо - качнёт, включит и будет наслаждаться таймзонами. Безо всяких конвертаций, в оригинальном формате. Обновились зоны - слили новую инфу - и дальше всё работает прямо сейчас и без перезапуска и обновления саса. Лично мне вообще не надо локальное время под мышкой на основе текущего времени на компе, например, при навигации. Да и по жизни требовалось пару раз всего, и то больше как просто _смещение_ узнать, а не само по себе время.
(0005752)
Tolik   
29-02-2012 12:54   
Часто смотрю время в других городах на timeanddate.com, этого достаточно. Но если САС будет показывать _достоверную_ инфу - тоже буду пользоваться.

Хорошо бы просто положить в директорию САС tzdata2011k.tar.gz и брать инфу оттуда.
(0005772)
zed   
01-03-2012 17:20   
>А почему бы вообще не выкинуть это из релиза и не сделать как дополнительную опцию?
Тоже об этом думал.

>Хорошо бы просто положить в директорию САС tzdata2011k.tar.gz и брать инфу оттуда.
Ну, это с точки зрения пользователя - хорошо. На самом деле - не очень. Если положить файл tzdb и файл с границами, то ведь их же придётся при _каждом_ запуске САСа парсить и переводить во внутреннее представление, чтобы можно было с этими данными как-то работать. А это, знаете-ли, не шибко быстрая операция. Поэтому, лучше эти данные всё-таки подготовить заранее.
(0006670)
zed   
04-05-2012 19:49   
Интересный топик, по схожей проблеме http://habrahabr.ru/post/143277/
А ещё более меня заинтересовал комментарий, что всё описанное можно легко и эффективно сделать при помощи функций СУБД (среди прочих упомянута и SQLite).

Непродолжительное гугление вывело меня на библиотеку SpatiaLite https://www.gaia-gis.it/fossil/libspatialite/home

SpatiaLite is an open source library intended to extend the SQLite core to support fully fledged Spatial SQL capabilities.
SQLite is intrinsically simple and lightweight

Т.е. насколько я понял, можно:
- автоматически сконвертировать *.shp файл с полигонами в базу данных sqlite
- при помощи библиотеки SpatiaLite и поставляемых ею специфических гис-функций (список с описанием: http://www.gaia-gis.it/gaia-sins/spatialite-sql-3.0.0.html ), получать ответ на вопрос "в какой полигон попадает точка с координатами X,Y"

Надо-ка будет присмотреться по-внимательнее.
(0006993)
zOn   
12-05-2012 06:14   
(edited on: 12-05-2012 06:42)
А Навителовские никто не пробовал курочить?
файлик прикрепил

а это http://support.microsoft.com/kb/888253 никак не поможет? может из винды можно брать файлик?

(0007000)
zed   
12-05-2012 18:33   
>А Навителовские никто не пробовал курочить?
>файлик прикрепил
Хм, что-то довольно компактное. Если бы ещё знать, что там за формат.
(0007001)
Dima2000   
12-05-2012 20:02   
>Если бы ещё знать, что там за формат.
Сильно подозреваю что там скомпилённый в бинарный вид текст вот такой базы - http://ru.wikipedia.org/wiki/Tz_database
Она поставляется типа в виде текстов (с сайта IANA, подразделение ICANN), но размер у них ... 680КБ. И не уверен что есть границы временных зон, скорее они дают параметры времени по некоторым населённым пунктам есть (зато даже с историей смен параметров времени!).
(0009607)
zed   
20-10-2012 14:07   
Написал dll, при помощи которой надеюсь решить данный тикет. В dll лежат округлённые и прореженные границы тайм зон. Весит она около 3 Мб и добавлять её нужно будет самостоятельно (выложу чуть позже). Т.е. нету dll - показывает по-старинке, есть - по уточнённым данным.
(0009610)
Tolik   
20-10-2012 16:04   
(edited on: 20-10-2012 16:08)
А можно посмотреть эти округлённые и прореженные границы тайм зон в виде kmz?

Насколько сложно будет изменить эти границы по мере смены настроения президентов?

Предлагаю убрать "показ по старинке", т.к. он врёт чуть более чем всегда. Нет dll - нет фичи (не показывать часы вообще или показывать системное время).

(0009611)
zed   
20-10-2012 16:32   
>А можно посмотреть эти округлённые и прореженные границы тайм зон в виде kmz?
Ну, теоретически могу сгенерировать и kml, если надо.

>Насколько сложно будет изменить эти границы по мере смены настроения президентов?
Актуализировать dll можно минут за пять, с учётом траты времени на загрузку новых границ и описаний тайм-зон. Исходники dll и вспомогательной утилитки для её актуализации будут выложены в паблик, так что моё участие в обновлении dll будет даже не обязательно - собрать сможет любой желающий, по мере необходимости.
(0009612)
bk99   
20-10-2012 16:59   
> Предлагаю убрать "показ по старинке", т.к. он врёт чуть более чем всегда. Нет
> dll - нет фичи (не показывать часы вообще или показывать системное время).

Да, лучше убрать. Так, как это реализовано сейчас, лишь вводит в заблуждение т.к. даёт ложную информацию, которой веришь. Было бы правильнее при отсутствии длл-ки вместо часов показывать что-то типа "no timezones.dll" и всплывающую подсказку (при наведении мыши) куда идти и что делать.
(0009613)
zed   
20-10-2012 17:20   
Приложил для тестов:
- TimeZone_Compact_2.7z - значения градусов округлены до 2-х знаков после запятой, полигоны с числом точек более 1000 сильно прорежены (чем больше полигон, тем он сильнее прорежен)
- TimeZone_Full_2.7z - аналогично предыдущему, но без какого-либо специального прореживания
- TimeZone_Full_4.7z - округление до 4-х знаков после запятой, без спец. прореживания
Ну и exe, где активирована эта функция.

Как использовать: dll распаковать в директорию с САС и переименовать в TimeZone.dll

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

Наихудший момент, с точки зрения производительности, это когда идёт переход от какой-либо известной тайм-зоны на водную поверхность (тайм-зона не определена и берётся из старого метода).

Замеченный недостаток: из-за прореживания полигонов в следствии округления либо из-за спец. прореживания (особенно) возможны моменты, когда на стыке двух тайм-зон не удаётся определить текущую тайм-зону (точка попадает в слепую зону между двух полигонов).

И чисто для информации: специально введён интервал в 0,5 сек. ограничивающий запросы к dll, чтобы не падала производительность при быстром перемещении курсора (особенно на малых зумах типа "весь мир"), поэтому возможна небольшая инерционность.
(0009614)
Tolik   
20-10-2012 18:26   
(edited on: 20-10-2012 19:44)
> на загрузку новых границ и описаний тайм-зон
Какие данные используются и откуда их загружать?

> могу сгенерировать и kml, если надо
Да, пожалуйста, очень интересно. С разными вариантами округления.

(0009615)
zed   
20-10-2012 18:37   
Границы отсюда http://efele.net/maps/tz/world/ (shape-файл tz_world_mp.zip)
Инфа о времени отсюда http://www.iana.org/time-zones (файл tzdata2012g.tar.gz)
(0009616)
Tolik   
20-10-2012 18:41   
Загрузил exe и самый большой dll.
Показывает правильно, не тормозит (правда, ноут мощный).

Пробел после UTC лучше убрать (UTC+4).

Не нравится, что в морях показывает что попало, например:
в Англии 19:30 (UTC+1) - правильно (там летнее время)
в проливе 18:30 - неправильно
во Франции 20:30 (UTC+2) -правильно.
(0009617)
Tolik   
20-10-2012 18:44   
(edited on: 20-10-2012 18:57)
В Индии время показывает правильно, а таймзону неправильно: (UTC +6) вместо (UTC+5:30).
В Непале то же: (UTC +6) вместо (UTC+5:45).

(0009618)
Tolik   
20-10-2012 18:51   
(edited on: 20-10-2012 18:55)
В Самоа показывает UTC+13, но если верить этому сайту там UTC+14 (с учётом летнего времени) http://www.timeanddate.com/worldclock/city.html?n=282
Но это, очевидно, вопрос к источнику данных.

Вот ещё откопал местечко за краем света: Chatham Islands :)
Там, как и в Непале, время правильное, только обозначение ТЗ неправильно.

(0009619)
zed   
20-10-2012 19:07   
>Не нравится, что в морях показывает что попало
В морях и незаселённых территориях временные зоны считаются чисто условно, я приводил выше цитату.
(0009620)
Tolik   
20-10-2012 19:13   
(edited on: 20-10-2012 19:17)
Я это заметил, потому и полез сразу проверять моря.

Слепую зону тоже посмотрел (TimeZone_Compact_2.7z): на границе России и Беларуси (N54°49'14.61" E30°49'36.65") размер слепой зоны больше 10 км. Слишком много.

А вот с TimeZone_Full_2.7z навскидку слепой зоны не заметил, так что это, пожалуй, оптимальный вариант (6 МБ).

(0009621)
Tolik   
20-10-2012 19:33   
(edited on: 20-10-2012 19:34)
Ошибку (см. elf) поймал так: двигал курсор с моря на сушу и обратно несколько раз в районе Рио.

(0009624)
zed   
20-10-2012 21:21   
С UTC вроде бы разобрался, теперь должно показывать всюду верно. Исправления будут в сегодняшней ночнушке.

>Ошибку (см. elf) поймал так
Ага, и я такую же ловил, но это что-то компонент ругается. Время вроде нормальное в мессадже, не пойму что его не устраивает.
(0009625)
Tolik   
21-10-2012 04:08   
В ночнушке 121021.6591 UTC в порядке, ошибка не воспроизводится (надо в 23:30 попробовать).

Может, попробовать округление до 1 знака без прореживания?
(0009629)
zed   
21-10-2012 10:38   
>Может, попробовать округление до 1 знака без прореживания?
Приложил TimeZone.x1.7z
(0009630)
Tolik   
21-10-2012 11:24   
TimeZone.x1.7z тоже работает нормально, но погрешность 0.1 градуса - всё-таки много, так что я выбираю TimeZone_Full_2.7z
(0009631)
zed   
21-10-2012 11:35   
(edited on: 30-12-2012 18:52)
Исходники и бинарники всего: https://bitbucket.org/sas_team/timezone/src

(0009633)
zed   
21-10-2012 12:58   
(edited on: 30-12-2012 18:53)
Сгенерировал kml с тайм-зонами для различной степень точности. Лежат здесь: https://bitbucket.org/sas_team/timezone/downloads в архивах TZID.
Там же, в файлах TimeZone, лежат и dll.

(0009634)
Tolik   
21-10-2012 13:28   
(edited on: 21-10-2012 13:31)
Спасибо за kml.
x3 практически не отличается от x4 и по размеру файла, и по форме полигонов, так что смысла в нём нет.
x1 слишком грубо, как я уже писал.

(0009635)
Tolik   
21-10-2012 13:49   
Есть ещё какой-то гистерезис.
Например, при движении вниз переход происходит здесь 54.944744° 30.876914°, а при движении вверх - здесь 54.955243° 30.877687°
Расстоянием между этим точками - 1 км.
Неужто так и задумано? Зачем?
(0009636)
zed   
21-10-2012 13:54   
>Неужто так и задумано? Зачем?
Да. В целях уменьшения запросов к dll и увеличения быстродействия. Координаты от мышки кэшируются с округлением до второго знака после запятой.
(0009638)
Tolik   
21-10-2012 14:54   
Так ведь он запрашивается раз в пол-секунды, разве этого ограничения недостаточно?
(0009639)
zed   
21-10-2012 15:02   
Могу загрубить до 4-х знаков, если сильно мешает. Петля гистерезиса всё-равно останется, но в меньших размерах (метров 100?).
(0009641)
zed   
21-10-2012 16:10   
Всё, завтрашняя ночнушка будет работать только с dll. Если её найти не удаётся - инфа о времени/таймзонах отключается, чекбоксы становятся не активными с объяснением причины.
(0009644)
Tolik   
21-10-2012 16:17   
(edited on: 21-10-2012 16:18)
Хорошо, пусть будет до 4-х знаков. Метров 100 - это нормально, никто и не заметит.
А то полигоны округляются до 4-х, а смысл? :)

(0009645)
zed   
21-10-2012 16:18   
Да, сделал до 4-х.
(0009652)
Tolik   
22-10-2012 04:12   
Надо внутри архивов переименовать dll, чтобы не приходилось это делать руками. Это вызовет массу вопросов. Также надо где-то в программе добавить ссылку на архив и подсказку, что именно скачивать (там 8 файлов, а нужен только один: какой?)
(0009662)
zed   
22-10-2012 07:56   
В релизе dll будет в комплекте, а для пользователей ночнушек можно в wiki написать небольшую заметку.
(0009663)
Tolik   
22-10-2012 07:58   
Да, и в FAQ
(0011402)
zed   
19-05-2013 11:56   
Актуализировал dll.
Забирать тут: https://bitbucket.org/sas_team/timezone/downloads
Рекомендуемая dll: TimeZone.x2.v1.0.2.0.7z
(0020047)
zed   
24-01-2021 13:15   
Библиотека TimeZone.dll сменила имя и прописку. Теперь это libtz.dll https://github.com/zedxxx/libtz/releases

Кроме того, теперь она будет включена и в архивы с ночной версией.