Подтвердить что ты не робот

Плагин настроек не работает должным образом с использованием свойства DateTime

Я использую плагин настроек , и у меня он работает, чтобы хранить несколько логических элементов. Теперь я хотел добавить управление объектом DateTime. Я добавил следующее в Settings.cs:

private const string TimeRemainingKey = "time_remaining";
private static readonly DateTime TimeRemainingDefault = DateTime.Now;

public static DateTime TimeRemaining
{
    get
    {
        return AppSettings.GetValueOrDefault(TimeRemainingKey, TimeRemainingDefault);
    }
    set
    {
        AppSettings.AddOrUpdateValue(TimeRemainingKey, value);
    }
}

Первоначально я использовал в своем коде следующее:

Settings.TimeRemaining = new DateTime().AddMinutes(30);

Когда я добавил некоторые записи, у меня было это:

DateTime dt = new DateTime();
Debug.WriteLine(dt.ToString());
dt = dt.AddMinutes(30);
Debug.WriteLine(dt.ToString());
Settings.TimeRemaining = dt;
Debug.WriteLine(Settings.TimeRemaining.ToString());

Он печатает:

1/1/0001 12:00:00 AM

1/1/0001 12:30:00 AM

1/1/0001 12:00:00 AM

Почему это происходит?

4b9b3361

Ответ 1

Плагин настроек преобразует DateTime в UTC, поэтому он выглядит как ваш часовой пояс, когда он конвертирует 1/1/0001 12:30:00 AM в UTC, он получает 1/1/0001 12:00:00 AM. В результате, когда значение считывается из настроек, вы получаете 1/1/0001 12:00:00 AM.

Если вы установите Kind для своей даты, плагин должен работать правильно:

Settings.TimeRemaining = DateTime.SpecifyKind(new DateTime().AddMinutes(30), DateTimeKind.Utc);