![](/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.