如何转换DateTimeOffset?到C#中的DateTime?

时间:2015-12-11 12:44:48

标签: c# xaml datetime

我需要转换DateTimeOffset吗?到DateTime。该值最初来自XAML CalendarDatePicker,但我需要将其更改为DateTime以存储该值。我找到了 this description如何转换DateTimeOffset,但我不认为它回答了我的问题,因为它们不使用可空类型。

1 个答案:

答案 0 :(得分:4)

Nullable类型很有用,但有时可能会让人感到困惑。 Nullable<T>是一个结构,其中T也是一个结构。这是struct包装实例变量T的值并公开三个主要成员。

HasValue // Returns bool indicating whether there is a value present.

Value // Returns the value of T if one is present, or throws.

GetValueOrDefault() // Gets the value or returns default(T).

您可以通过添加&#39; ?&#39;来使任何结构可为空。在声明变量类型之后,或者通过在Nullable<处包装>变量类型的变量类型。如下图所示:

Nullable<DateTimeOffset> a = null;
DateTimeOffset? b = null;

我相信您在此处想要的是检查实际上是否存在.HasValue的值,然后从偏移量中取出.Value并执行标准转换。

示例

var now = DateTime.Now;
DateTimeOffset? offset = now;
DateTime dateTime = offset.HasValue ? offset.Value.DateTime : DateTime.MaxValue;

或者,如果您想要DateTime?执行此操作:

var now = DateTime.Now;
DateTimeOffset? offset = now;
DateTime? dateTime = offset.HasValue ? offset.Value.DateTime : (DateTime?)null;