2017-02-27 90 views
1

我试图将字符串的类型更改为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方法。

+0

你可以使用'DateTime.Parse'吗?如果是这样,转换'DateTime'到'DateTimeOffset'是微不足道的 –

+0

由于发展原因,我不能使用DateTimeOffset.Parse – Matteo

+0

只是一个FYI,DateTime.Parse和DateTimeOffset.Parse是不一样的。他问的是另一种功能,而不是你明确表示不能在帖子中使用的功能。 – Aaron

回答

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的一些细节转换。

相关问题