Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将字符串参数作为IformartProvider传递_C#_.net - Fatal编程技术网

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

C# 如何将字符串参数作为IformartProvider传递,c#,.net,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)

这是我第一次使用
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")

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

像这样使用它:

var dateString = "11/06/18";
var date = DateTime.ParseExact(dateString, "MM/dd/yy", CultureInfo.CurrentCulture);
您也可以使用,它会尝试找出您使用的格式

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

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

您需要的是已经可以使用该方法,例如:

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
区域性,因为它使用仅限美国的日期格式(奇怪,不是吗?)


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

IFormatProvider
需要的是CultureInfo对象,而不是模式。您正在尝试使用
Convert.ToDateTime
,就好像它是
DateTime.ParseExact
。使用还是替代你实际上想做什么?将字符串转换为日期时间?@GabrielLuci我正在尝试将字符串转换为日期时间dateTime@s.lk您只是无法将模式传递给Convert.ToDateTime。它接受的唯一字符串是日期文本,而不是模式。顺便说一句,您尝试使用的是
DateTime.TryParse
方法,例如
DateTime.TryParse(usDate,GultureInfo.GetCulture(“en-US”)
是否已选中或使用
DateTime.Parse()
?DateTime.Parse或TryPrase就足够了,因为字符串使用美国文化。@s.lk此处发布的代码有效。您尝试了什么,出现了什么错误?“无法从字符串转换为System.IFormatProvider”有人能帮忙吗?@S.lk我们已经做了。这个代码有效。另一个答案有效。注释有效。这个错误不能来自任何答案或注释。你尝试了什么,问题出在哪里?你为什么坚持把错误的类型传递给错误的方法?@S.lk btw
convert.ToDateTime(val.ToString(date));
是无用的。如果有效,它将返回
val
。如果
ToString()中使用的格式字符串
与当前区域性的格式不匹配,它将引发InvalidFormatException。您想在这里做什么?DateTime是一个二进制值,它没有格式。如果要删除时间部分,请使用
DateTime.Date
。如果要以某种方式显示它或将其转换为字符串,请在显示之前将日期格式化为字符串艾因
return DateTime.TryParse(@"11/13/2018", CultureInfo.InvariantCulture, DateTimeStyles.None,
                         out var dt) 
       ? dt
       : (DateTime?)null;