繁体   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