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 btwconvert.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;