2016-05-02 9 views
23

私はsettings pluginを使用しており、ブール値を保存するようにしています。これで、DateTimeオブジェクトの管理を追加したかったのです。設定プラグインがDateTimeプロパティで正しく動作していません

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

それプリント:私はこれを持っていたいくつかのログを追加する場合

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

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.csに次を追加しましたアウト:

1/1/0001 12:00:00 am

1/1/0001 12時30分〇〇秒AM

1/1/0001午前12:00:00

なぜこの動作は発生しますか。

+0

あなたはDateTimeオブジェクトを作成しているが、あなたは値でそれを初期化していません。したがって、DateTimeの最小値が必要です。 – Mainak

+4

@Mainakそれはここで問題ではありません。彼は設定を更新し、彼がそれを再び読むとき、更新はなくなった。短いバージョンの 'Setting = dt'ですが、その後は' dt!= Setting'です。 –

+0

次の場合はどうなりますか: 'Settings.TimeRemaining = Settings.TimeRemaining.AddMinutes(30); System.Diagnostics.Debug.WriteLine(Settings.TimeRemaining.ToString()); ' それは動作しますか、同じエラーが発生しますか? – Draken

答えて

14

設定プラグインconverts the DateTime to 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); 
+0

'DateTimeKind.Utc'を使用すると期待通りに機能しました。ありがとうございました! – Nfear

関連する問題