如何使用Convert.ChangeType而不是DateTime.ParseExact?

时间:2016-01-23 09:48:44

标签: c# datetime

我正在编写一个解析器类,它使用自定义格式将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

1 个答案:

答案 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>

这意味着此方法重载不接受第一个参数的任何自定义日期和时间字符串。