簡體   English   中英

為什么 Convert.ChangeType(string) 不能與 DateTimeOffset 一起使用,當它與 DateTime 一起使用時?

[英]Why doesn't Convert.ChangeType(string) work with DateTimeOffset, when it works with DateTime?

即使我提供時區,也會發生這種情況。

var dateString = "2008-09-22T14:01:54.9571247Z";
var dateTime = Convert.ChangeType(dateString, typeof(DateTime));  // works
var dateTimeOffset = Convert.ChangeType(dateString, typeof(DateTimeOffset));  // throws InvalidCast exception

為什么會發生這種情況?

我想要做的是使用Convert.ChangeType即時實現一個包羅萬象的類型轉換器。 它適用於除DateTimeOffset之外的其他類型(例如float <-> intstring -> DateTime )。

如果您查看Convert.ChangeType方法的文檔,您將看到以下注釋:

例外
無效投射異常
不支持此轉換。
-或者-
valuenullconversionType是值類型。
-或者-
value沒有實現IConvertible接口。


既然我們知道value不為 null 並且該string實現了IConvertible接口,那么剩下的唯一原因就是第一個:

不支持此轉換。


我們可以做的是首先將其轉換為DateTime ,然后將其轉換為DateTimeOffset 此處有一些文檔描述了實現此目的的各種方法,其中之一是:

“您還可以通過為其分配一個 DateTime 值來創建一個新的 DateTimeOffset 值”

所以我們可以這樣做:

DateTimeOffset dateTimeOffset = (DateTime) Convert.ChangeType(dateString, typeof(DateTime));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM