如何将类型从String更改为DateTimeOffset对象

时间:2017-02-27 18:06:11

标签: c# datetimeoffset

我正在尝试将字符串的类型更改为DateTimeOffset对象。

var Result = Convert.ChangeType("2017-02-27T18:00:00.0000000+01:00",
    typeof(DateTimeOffset), CultureInfo.InvariantCulture);

我也试过这些字符串

2017-02-27 18:00:00Z

02/27/2017 18:00:00

但我总是获得InvalidCastException

传递给ChangeType的正确字符串是什么?出于开发原因,我无法使用DateTimeOffset.Parse方法。

1 个答案:

答案 0 :(得分:1)

如果您无法使用DateTime.Parse(),请尝试以下操作:

var dateTime = (DateTime)Convert.ChangeType(stringDateTime,
        typeof(DateTime), CultureInfo.InvariantCulture);

var dateTimeOffset = new DateTimeOffset(dateTime); 

这似乎适用于您问题中的所有示例输入字符串。

或者,您可以尝试TypeDescriptor.GetConverter()

var converter = TypeDescriptor.GetConverter(typeof(DateTimeOffset));
var result = converter.CanConvertFrom(typeof(string)) ?
    (DateTimeOffset)converter.ConvertFrom(stringDateTime) :
    new DateTimeOffset();

但尝试转换02/27/2017 18:00:00时,这并不起作用。

查看this SO question,了解有关stringDateTimeOffset转化的一些详细信息。