Критические изменения NodaTime .9 -> 1.1

Есть ли список критических изменений с .9 на 1.0 и 1.1?

История версий начинается с версии 1.0.

Например... Исходный код (на .9), теперь плачет (на 1.1).

public static DateTime AdjustTo(this DateTime date, string timeZoneId)
{
    if (date == DateTime.MinValue)
        return date;
    DateTimeZone.SetProvider(new BclTimeZoneProvider());
    var zone = DateTimeZone.ForId(timeZoneId ?? "UTC");
    var dateTime = new ZonedDateTime(Instant.FromDateTimeUtc(date.ToUniversalTime()), zone);
    return dateTime.ToDateTimeUnspecified();
}

В приведенном выше коде есть два критических изменения... DateTimeZone не имеет методов SetProvider или ForId.

Кроме того, если я делаю это неправильно, я также приму этот отзыв.

Спасибо.


person ScottCate    schedule 03.05.2013    source источник


Ответы (1)


Чтобы ответить на ваш первый вопрос: нет, у нас есть только история версий с 1.0.0-beta1 и выше. Хотя, как оказалось, мы убрали концепцию статического поставщика часовых поясов в версии 1.0.0-beta2, так что она описана, хотя и кратко:

  • Overhaul of how to get a DateTimeZone from an ID:
    • IDateTimeZoneProvider (SPI for time zones) renamed to IDateTimeZoneSource, along with similar renaming for the built-in sources
    • Новый интерфейс IDateTimeZoneProvider предназначен для вызывающих абонентов, предполагается кэширование
    • Новый класс DateTimeZoneProviders со статическими свойствами для доступа к встроенным провайдерам: TZDB, BCL и по умолчанию (в настоящее время TZDB)
    • Удалены различные статические методы DateTimeZone, чтобы всегда использовать реализацию IDateTimeZoneProvider.
    • DateTimeZoneCache теперь общедоступен и реализует IDateTimeZoneProvider

Эквивалентом вашего кода для 1.0 будет:

public static DateTime AdjustTo(this DateTime date, string timeZoneId)
{
    if (date == DateTime.MinValue)
        return date;
    var zone = DateTimeZoneProviders.Bcl[timeZoneId ?? "UTC"];
    var dateTime = new ZonedDateTime(Instant.FromDateTimeUtc(date.ToUniversalTime()), zone);
    return dateTime.ToDateTimeUnspecified();
}
person Malcolm Rowe    schedule 04.05.2013