如何将字符串参数作为IformartProvider传递

时间:2018-11-06 16:54:51

标签: c# .net

这是我第一次使用IFormatProvider,我想知道如何传递要转换为日期的字符串参数。

private DateTime DateFormat(string date)
{
    var value = data(param, parameter);

    if (value!= null)
    {
        var val = value.ToString().Trim();
        if(convert.ToDateTime(val) == null)
        { 
            return null;
        }
     }
     else
     {
        return convert.ToDateTime(val.ToString(date));
     }
}

//I am getting error here
DateFormat("mm/dd/yy")

2 个答案:

答案 0 :(得分:0)

已经有一种方法可以执行此操作:DateTime.ParseExact

像这样使用它:

var dateString = "11/06/18";
var date = DateTime.ParseExact(dateString, "MM/dd/yy", CultureInfo.CurrentCulture);

您还可以使用DateTime.Parse,它将尝试找出您使用的格式。

var dateString = "11/06/18";
var date = DateTime.Parse(dateString);

DateTime.Parse在大多数情况下都可以使用,除非您使用非常奇怪的格式。

答案 1 :(得分:0)

您已经可以使用DateTime.TryParse方法获得所需的内容,例如:

var usCulture=CultureInfo.GetCultureInfo("en-US");
DateTime.TryParse(@"11/13/2018", usCulture,DateTimeStyles.None,out var dt);

如果成功,将返回true并将结果放入dt参数中。如果您想在解析失败时返回NULL(不是一个好主意),则可以编写:

var usCulture=CultureInfo.GetCultureInfo("en-US");
return DateTime.TryParse(@"11/13/2018", usCulture,DateTimeStyles.None,out var dt) 
       ? dt
       : (DateTime?)null;

您还可以使用CultureInfo.InvariantCulture文化,因为它使用的是仅美国日期格式(奇怪,不是吗?)

return DateTime.TryParse(@"11/13/2018", CultureInfo.InvariantCulture, DateTimeStyles.None,
                         out var dt) 
       ? dt
       : (DateTime?)null;

所有基本类型都有一个Parse,许多都有一个ParseExact方法,该方法应用于解析。 Convert类仅提供基于默认值和当前线程的区域性的基本解析功能。