我正在编写一个解析器类,它使用自定义格式将string
解析为type
。
例如,我想使用Parse<DateTime>("20161018",typeof(DateTime),UnknownFormatProvider)
并返回已解析的DateTime
;
我知道我可以使用DateTime.ParseExact
将具有特定格式的string
转换为DateTime
,但出于上述原因,我必须使用Convert.ChangeType(object,Type,IFormatProvider)
。
有没有办法在IFormatProvider
中创建Convert.ChangeType(object,Type,IFormatProvider)
来使其像DateTime.ParseExact
一样工作?
编辑:也许
System.Globalization.DateTimeFormatInfo
应该有用,但是我 仍然不知道如何将其设置为DateTime.ParseExact
答案 0 :(得分:1)
有没有办法创建一个
IFormatProvider
来使用Convert.ChangeType(object,Type,IFormatProvider)
要做到这一点 就像DateTime.ParseExact
?
我不这么认为。
Convert.ChangeType(Object, TypeCode, IFormatProvider)
和Convert.ChangeType(Object, Type, IFormatProvider)
重载都使用了TypeCode.DateTime
方法,typeof(DateTime)
和IFormatProvider
作为第二个参数。
IConvertible.ToDateTime(IFormatProvider)
http://referencesource.microsoft.com/#mscorlib/system/convert.cs,206
此方法解释为;
使用此实例的值转换为等效 DateTime 指定的特定于文化的格式信息。
我认为,如果那些object
作为第一个参数是string
,那么仅的重载接受{{1}}参数使用的标准日期和时间格式。< / p>
这意味着此方法重载不接受第一个参数的任何自定义日期和时间字符串。