Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将UTC日期存储在Visual Studio设置文件中_C#_Datetime_Visual Studio 2013 - Fatal编程技术网

C# 将UTC日期存储在Visual Studio设置文件中

C# 将UTC日期存储在Visual Studio设置文件中,c#,datetime,visual-studio-2013,C#,Datetime,Visual Studio 2013,下面是我在C中使用的设置的一些代码片段: 设置。设置 从名字可以看出,我希望日期是UTC时间。在我的用例中,接受日期的方法将通过检查DateTime.Kind属性并确保其为DateTimeKind.UTC来检查传递给它的日期是否为UTC。但是,调用Settings.Default.SomeSettingUtcDate返回的日期将不会设置此属性 使用UTC种类集创建一个新的DateTime对象,以满足所调用方法的检入要求,这似乎是一种黑客行为,因为使用UTC日期的主要目的是让每个人都同意事情实际发

下面是我在C中使用的设置的一些代码片段:

设置。设置

从名字可以看出,我希望日期是UTC时间。在我的用例中,接受日期的方法将通过检查DateTime.Kind属性并确保其为DateTimeKind.UTC来检查传递给它的日期是否为UTC。但是,调用Settings.Default.SomeSettingUtcDate返回的日期将不会设置此属性

使用UTC种类集创建一个新的DateTime对象,以满足所调用方法的检入要求,这似乎是一种黑客行为,因为使用UTC日期的主要目的是让每个人都同意事情实际发生的时间,并促使人们思考时间,并在第一时间就把它做好。如果我们从设置文件中获取任何旧的日期值,并假设它毕竟是UTC,那么在我看来,我们最好不要检查该类型是否为UTC,因为在设置文件中不必如此

由于我的方法可以用另一个日期(而不是设置文件中的日期)调用,因此检查UTC类型仍然有价值,因此我如何才能缩小这一差距,并使我和其他开发人员更容易在设置文件中存储日期的情况下落入成功的陷阱

是否有方法通过不同的日期时间对象指定UTC,以便在编辑设置时至少假定该日期为UTC,并在GUI中可见地显示该日期的某些指示符,例如它是UtcDateTime,或者在日期字符串本身中指定UTC?

设置文件中未序列化该类型,因此,当您反序列化时,无法将其取回。最好的选择可能是使用DateTimeOffset而不是DateTime;DateTimeOffset嵌入时区信息,该信息包含在其字符串表示中,因此如果序列化UTC日期,则在反序列化时将获得UTC日期

注意:DateTimeOffset不会出现在设置设计器的类型下拉列表中,因此您必须从浏览中手动选择它。。。列表末尾的条目;它在mscorlib/System下

DateTimeOffset是否必须作为DateTime的偏移量应用才能用作DateTime?ErikE,不,DateTimeOffset包括日期和时区。你可以像约会时间一样使用它;它有Now和UtcNow等属性,还有要转换为DateTime LocalDateTime的属性,UtcDateTimeI把它和TimeSpan混淆了。谢谢,这听起来很完美。
<Setting Name="SomeSettingUtcDate" Type="System.DateTime" Scope="Application">
   <Value Profile="(Default)">10/27/2014 12:00:00</Value>
</Setting>
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("11/6/2014 12:00:00")]
public global::System.DateTime SomeSettingUtcDate {
    get {
        return ((global::System.DateTime)(this["SomeSettingUtcDate"]));
    }
}