2016-01-23 96 views
0

我正在寫一個解析器類,它將string解析爲具有自定義格式的type如何使用Convert.ChangeType而不是DateTime.ParseExact?

例如,我想使用Parse<DateTime>("20161018",typeof(DateTime),UnknownFormatProvider)並返回解析DateTime;

我知道我可以使用DateTime.ParseExactstring以特定格式轉換爲DateTime但由於上述原因,我必須使用Convert.ChangeType(object,Type,IFormatProvider)

有沒有什麼辦法可以創建一個IFormatProvider用於Convert.ChangeType(object,Type,IFormatProvider)使其工作就像DateTime.ParseExact

編輯:也許System.Globalization.DateTimeFormatInfo應該工作,但我 仍然不知道如何設置它像DateTime.ParseExact

+0

CultureInfo.CurrentCulture不適用於我的問題,我想指定格式。 –

回答

1

工作有什麼方法來創建一個IFormatProviderConvert.ChangeType(object,Type,IFormatProvider)使用要做到這一點 就像DateTime.ParseExact

我不這麼認爲。

兩個Convert.ChangeType(Object, TypeCode, IFormatProvider)Convert.ChangeType(Object, Type, IFormatProvider)重載用發動機罩下IConvertible.ToDateTime(IFormatProvider)方法TypeCode.DateTimetypeof(DateTime)作爲第二參數。

http://referencesource.microsoft.com/#mscorlib/system/convert.cs,206 http://referencesource.microsoft.com/#mscorlib/system/convert.cs,325

此方法所解釋的;

將此實例的使用 指定的區域性特定的格式的信息的等效日期時間值轉換。

我認爲這兩個重載IFormatProvider由參數只使用接受標準的日期和時間的格式,如果這些object作爲第一個參數是一個string

這意味着此方法重載不接受任何第一個參數的自定義日期和時間字符串。