2015-05-05 3 views
1

Как указано в Getting Daylight Savings Time Start and End in NodaTime летние даты начала и окончания летнего времени могут быть решены за данный год.Как получить правила перехода на летнее время от Noda Время в формате часового пояса POSIX

Как получить фактические правила для расчета даты начала и окончания, предпочтительно в POSIX time zone format?

Проект в настоящее время использует Noda Time, но может быть рассмотрено любое другое .NET-решение.

+0

Я ответил как мог, но мне непонятно, что вы считаете «реальными правилами», или тем, что вы хотите делать с информацией. Чем больше вы сможете уточнить свой контекст, тем больше мы сможем предоставить. –

ответ

1

Формат POSIX, по-видимому, удовлетворяет единому правилу, тогда как в действительности правила меняются со временем. Мне также непонятно, допускают ли правила POSIX 24:00 как время перехода, и ожидание того, что все переходы указаны в локальное время, кажется неудачным. (В TZDB некоторые правила выражаются в терминах UTC, некоторые - по времени на стене, а некоторые - по стандартным временам. Выполнение «простого» перехода от этого к «все локально» может вызвать некоторые очень тонкие ошибки.) Короче говоря, я ожидал бы, что переход от TZDB к POSIX будет потенциально убыточным.

«Фактические правила» не отображаются через API-интерфейс Noda, поскольку они редко бывают полезны для клиентов (по сравнению с просто получением данных), но вы можете посмотреть код NodaTime.TzdbCompiler, чтобы увидеть, как Правила TZDB анализируются, сохраняются в памяти и сериализуются на диск. Сериализованный формат не имеет достаточно информации, чтобы всегда восстанавливать исходные правила, но, конечно, вы можете создать свой собственный формат сериализации в вилке.

Для исходных (исходных) исходных данных IANA time zone database - ваша лучшая отправная точка.

+1

Почему несколько правил в tzdb, а не только правила, основанные на UTC? – CodesInChaos

+1

@CodesInChaos: вы не могли бы выразить все в правилах, основанных на UTC, потому что иногда вам нужно было выразить это в предыдущий день, где правило тогда не сработало бы - первое воскресенье месяца не всегда день после первой субботы в месяце, например. В конечном счете, TZDB призван представлять законы и обычаи отдельных областей - поэтому, если они выражаются в местное время (или стандартное время) и не могут быть «сдвинуты» на UTC без изменения значения, что бы вы сделали? –