PyOpenGl или поросенок?

Краткий ответ

TimeZoneInfo.SupportsDaylightSavingTime учитывает все данные о часовых поясах, доступные в системе, а не только данные текущего года. Как в Argentina Standard Time, так и Altai Standard Time существуют периоды, когда DST действовал, в течение периодов времени, которые Windows отслеживает для них.


Более длинный ответ

Документация для TimeZoneInfo.SupportsDaylightSavingTime (с которой вы уже связались в своем вопросе) объясняет:

Получает значение указание на наличие в часовом поясе правил перехода на летнее время.

blockquote>

Что немного менее понятно, так это то, что он имеет в виду конкретно TimeZoneInfo.AdjustmentRule объекты, возвращаемые методом TimeZoneInfo.GetAdjustmentRules, и что это все [ 1156] правила в системе, а не только на текущий год.

Политика Microsoft гласит, что Windows отслеживает все изменения, начиная с 2010 года. Однако некоторые часовые пояса (например, для Аргентины) уже отслеживали изменения до того, как была написана политика, поэтому в некоторых случаях вы увидите более ранние данные.

В реестре Windows вы можете найти все данные о часовых поясах, о которых знает система, по следующему ключу:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones

Каждое из значений TimeZoneInfo.Id соответствует подразделу этого раздела. и правила корректировки (если таковые имеются) будут в соответствии с Dynamic DST в соответствии с этим.

Для Argentina Standard Time\Dynamic DST мы находим данные с 2006 по 2010 год.

image

Даже не расшифровывая данные, мы можем видеть, что между годами были различия. Посмотрите на timeanddate.com здесь дает нам детали:

image

Похоже, что летнее время было в силе для летних сезонов 2007-08 и 2008-09 гг. (У Аргентины, находящейся в южном полушарии, лето разбито на два года.)

Действительно, мы можем видеть это из .NET:

var tz = TimeZoneInfo.FindSystemTimeZoneById("Argentina Standard Time");
var dt = new DateTime(2008, 1, 1);
var dst = tz.IsDaylightSavingTime(dt); // True

Таким образом, это подходит для TimeZoneInfo.SupportsDaylightSavingTime, чтобы вернуть True, потому что действительно есть действительные даты, которые были в летнее время для этого часового пояса.

1147 То же самое можно найти и на Алтае. Windows отслеживает данные с 2010 года, и DST существовал в 2010 году .

image

Обратите внимание, что оно также имеет изменения к своему стандартному времени в 2014 году и снова в 2016 году. Это еще одна причина того, что Правило корректировки может существовать. К сожалению, в Windows нет способа смоделировать это без использования переходов, помеченных как «начало DST» или «конец DST». Таким образом, некоторая часть этих лет вернется True из IsDaylightSavingTime, даже если ни одна из сторон перехода не считалась переходом на летнее время. Это известная проблема с часовыми поясами в Windows. Это компромисс, который гарантирует, что используется правильное смещение UTC, даже если переход предназначен для изменения стандартного времени вместо перехода на летнее время.

Если вам абсолютно необходимо знать, был ли переход связан с DST или нет, вы можете вместо этого использовать данные часового пояса IANA через библиотеку Noda Time . Свойство ZoneInterval.Savings скажет вам это. Однако, , это говорит о «постоянном переходе на летнее время». Даже в базе данных IANA они обычно рассматриваются как изменения стандартного времени, а не истинного перехода на летнее время. Таким образом, вы, вероятно, найдете случаи, когда кто-то может сказать: «Мы постоянно принимаем летнее время», но данные не совпадают.

Относительно вашего последнего вопроса:

Как я могу убедиться, что у меня есть последние обновления DST / TZ от Microsoft, помимо того, что я объяснил выше?

blockquote>

Достаточно просто убедиться, что вы используете Центр обновления Windows. Все обновления DST / TZ, перечисленные на сайте сообщества, развернуты с регулярными обновлениями для всех поддерживаемых версий Windows, независимо от того, в каком часовом поясе вы находитесь.

24
задан Hortitude 11 November 2008 в 03:17
поделиться

6 ответов

Как Tony сказал, это действительно собирается зависеть от Ваших целей. Если бы Вы "несерьезны", чтобы попытаться узнать о OpenGL или 3D рендеринге в целом, что я обошелся бы без всех шуток и начал бы работать с PyOpenGL, который является, как близко, Вы собираетесь добраться до "необработанного" 3D программирования с помощью Python.

, С другой стороны, если Вы "несерьезны" посредством копирования игры или мультимедийного приложения или попытки узнать о практиках программирования в целом, чем Pyglet, сохранит Вас много первичного времени разработки путем обеспечения рычагов для входных событий, звуков, text/billboarding, и т.д. Часто, эти оплачиваемые авансом инвестиции - то, что препятствует тому, чтобы люди завершили свои проекты, таким образом, сделать его для Вас не что-то, чтобы быть проигнорированным. (Это - также очень Pythonic, чтобы не перестраивать колесо.)

, Если Вы надеетесь делать какой-либо вид усиленного подъема (который обычно выходит за пределы моего определения "лужения", но возможно не при переделывании 3D дизайна механизма) тогда Вы могли бы хотеть смотреть на Людоеда Python, который переносится очень полнофункциональный и устойчивый ЛЮДОЕД, 3D графический механизм.

29
ответ дан 28 November 2019 в 22:14
поделиться

Я сказал бы, что Pyglet на самом деле более развит, чем PyOpenGL. Это имеет хороший API сам по себе, и это имеет полную обертку вокруг OpenGL, к которому получают доступ через pyglet.gl модуль! PyOpenGL даже не обертывает все функции, которые имеет OpenGL. Pyglet также имеет большую библиотеку для рендеринга 2D с аппаратным ускорением через OpenGL, и это действительно хорошо сделано.

, Если Вы хотите мощный готовый 3D механизм, Вы имеете Людоед и такой

6
ответ дан 28 November 2019 в 22:14
поделиться

у поросенка есть много хороших отдельно оплачиваемых предметов, включенных с ним (как загрузка изображения и звук). Если бы Вы начинаете, я попробовал бы поросенка сначала, и затем переключился бы на PyOpenGL, если Вы чувствуете, что хотите стать ближе к металлу.

реальный важный вопрос, хотя: что Вы пытаетесь выполнить?

4
ответ дан 28 November 2019 в 22:14
поделиться

Я продвигаю поросенка, потому что он имеет самый хороший API, который я все же видел на материале как это.

Pyglet имеет opengl API также. Но часто более хорошо использовать недавно добавленную поддержку списка вершины.

pyglet.gl

4
ответ дан 28 November 2019 в 22:14
поделиться

Я рекомендовал бы Pyglet, потому что очень легко начать и иметь что-то основное выполнение, и затем можно добавить более усовершенствованные методы в собственном темпе.

3
ответ дан 28 November 2019 в 22:14
поделиться

API GL pyglet далеко не так хорош, как PyOpenGL - pyglet находится на уровне необработанных ctypes, что означает, что вам также необходимо изучить ctypes. Если вы планируете заниматься программированием OpenGL, вам нужно использовать PyOpenGL.

Приятно то, что вы можете прекрасно смешать оба. Используйте pyglet для предоставления контекста GL, звуков, событий, загрузки изображений и управления текстурами, рендеринга текста и т. Д. И т. Д. Используйте PyOpenGL для фактического программирования OpenGL, которое вам нужно сделать.

3
ответ дан 28 November 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: