【问题标题】:How can I use Convert.ChangeType instead of DateTime.ParseExact?如何使用 Convert.ChangeType 而不是 DateTime.ParseExact?
【发布时间】:2016-01-23 09:48:43
【问题描述】:

我正在编写一个解析器类,它将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 那样工作

【问题讨论】:

  • CultureInfo.CurrentCulture 不适用于我的问题,我想指定格式。

标签: c# datetime


【解决方案1】:

有什么方法可以创建一个IFormatProvider 来使用 Convert.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

这个方法解释为;

将此实例的值转换为 等效 DateTime 使用 指定的文化特定格式信息。

我认为这两个重载接受IFormatProvider参数使用的标准日期和时间格式,前提是object作为第一个参数是string

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2019-10-31
    • 2021-05-24
    相关资源
    最近更新 更多