我有一个使用IFormatProvider将字符串转换为dateTime的方法,但是我不知道为获得这种格式(mm / dd / yy)调用该方法时应该传递什么内容
private DateTime DateFormat(int order, IFormatProvider provider, Dictionary<string,string> dictonary, string key)
{
var value = GetValues(order, dictonary, key) ;
if (value!= null)
{
var val = value.ToString().Trim();
if(string.IsNullOrEmpty(val))
return null;
if (convert.ToDateTime(val) == DateTime.MinValue)
{
return null;
}
else
{
return convert.ToDateTime(val.ToString(provider));
}
}
return null;
}
//I am struggling here
OrderDate = resultset.ContainsKey("OrderDate") ? DateFormat(5, "I should
pass the date of format mm/dd/yy", dictionary, "OrderDate") : null;
答案 0 :(得分:0)
这是一个示例,说明了@SLaks的注释“使用CultureInfo”。我约会的格式对德国人来说是完全有意义的,但在美国却毫无意义。然后,我尝试使用德语的CultureInfo
(/ IFormatProvider
)和美国的语法来解析它。
public static void Test()
{
var dateString = "29.7.2018";
var cultureGermany = new CultureInfo("de-DE");
var cultureUs = new CultureInfo("en-US");
var germanSucceed = DateTime.TryParse(dateString, cultureGermany, DateTimeStyles.None, out var germanDateTime);
var usSucceed = DateTime.TryParse(dateString, cultureUs, DateTimeStyles.None, out var usDateTime);
var germanyResult = germanSucceed ? germanDateTime.ToString() : "Failed";
var usResult = usSucceed ? usDateTime.ToString() : "Failed";
Debug.WriteLine($"Germany: Succeeded: {germanSucceed}, value: {germanyResult}");
Debug.WriteLine($"US: Succeeded: {usSucceed}, value: {usResult}");
}
输出是:
Germany: Succeeded: True, value: 7/29/2018 12:00:00 AM
US: Succeeded: False, value: Failed
这表明德国CultureInfo能够解析该字符串,但美国字符串失败。
如果我将日期字符串更改为美国友好的日期字符串:
var dateString = "7/29/2018";
我得到相反的结果:
Germany: Succeeded: False, value: Failed
US: Succeeded: True, value: 7/29/2018 12:00:00 AM
顺便说一句,当您需要将字符串解析为一种类型时,使用SomeType.TryParse
几乎总是最好的解决方案(至少如果该字符串来自某个来源,则无法确定其格式是否正确) )。