![](/img/trans.png)
[英]How to convert string to datetime using Convert.ChangeType not considering timezone
[英]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
<-> int
、 string
-> DateTime
)。
如果您查看Convert.ChangeType
方法的文檔,您將看到以下注釋:
例外
無效投射異常
不支持此轉換。
-或者-
value
為null
,conversionType
是值類型。
-或者-
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.