我是C#的新手。
我必须构建一个读取字符串并尝试将其转换为日期的脚本。
问题是:
- 日期有不同的格式。 (国际,美国,日本)
- 日期有不同的分隔符,或根本没有。
- 年份可能完成或只有2个职位
我已经开始更换可能的分隔符:
dateinstring = dateinstring.Replace("-","");
dateinstring = dateinstring.Replace(".","");
dateinstring = dateinstring.Replace("/","");
然后检查长度以查看年份是否完整(例如31102012或311012)
if(dateinstring.lenght = 8){
//check format with complete date
}else{
//check format with reduced year
}
现在我偶然发现了这个函数:DateTime.TryParseExact
似乎做了同样的事情,但它返回一个布尔值(true或false)而不是日期本身。
我错过了什么吗? C#中有哪些方法可以执行此操作,还是应该继续使用我的解决方案?
答案 0 :(得分:1)
这是我在项目中使用的函数,当内置解析失败时 - 所以它只涵盖其他格式,而不是标准格式。
private DateTime? TryParseNumberString(string dateText)
{
// additional date format options to be accepted
var extraDateFormats = new[]
{
"d.M.",
"d.M",
"ddMMyyyy",
"ddMMyy",
"ddM"
};
foreach (var item in extraDateFormats)
{
DateTime test;
if (DateTime.TryParseExact(dateText, item, null, System.Globalization.DateTimeStyles.AssumeLocal, out test))
{
return test;
}
}
return null;
}
方法基本上是,我想到了一些我想支持的额外日期表示和评估顺序,以便根据我的意愿评估模糊字符串。
根据您的要求,您可以更改格式字符串数组,也可以添加特定的文化,以防您希望支持带有书面日/月的长日期格式。
您还可以尝试DateTime.TryParse(input, culture, DateTimeStyles.None, out result)
使用不同的culture
值,以便按惯例尝试解析英语,日语和其他语言。