正在将不一致的数据转换为DateTime
本文关键字:转换 DateTime 数据 不一致 | 更新日期: 2023-09-27 18:20:54
我必须读取一个文件,并遍历每一行并将其注入数据库,但问题是当我用,
分割每一行时,它的一个索引包含格式不一致的日期字符串。
有时它从年份2014-01-01
开始,有时它从日期01-01-2014
开始。问题是我的数据库字段类型是datetime,我无法修复数据,因为它是4000行的数据,有办法转换它吗?
foreach (string line in lines)
{
var txt = line.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
idx += 1;
if (txt.Length == 49)
{
if (txt[24] != "")
{
user_list usr = new user_list
{
email = (txt[24].Replace("'","")).Replace(" ",""),
birthday = Convert.ToDateTime(txt[10].Replace("'","")), //THIS PART HAVE INCONSISTENT DATE FORMAT
birthplace = (txt[9].Replace("'","")).Replace(" ",""),
id_no = (txt[29].Replace("'", "")).Replace(" ", ""),
id_valid_to = valid_to,
modified_date = DateTime.Now,
created_date = Convert.ToDateTime(txt[46].Replace("'", "")),
language_pref = "ind",
status_user = 1,
user_type = "user",
managed_by = "self",
expected_salary = salary
};
imp.user_lists.InsertOnSubmit(usr);
}
}
else
{
throw new Exception ("index : " + idx + " , total length : " + txt.Length);
}
}
这很有效。。。
string[] dates = new [] { "2014-01-01", "01-01-2014"};
foreach (string d in dates)
{
DateTime parsed;
if (DateTime.TryParseExact(d, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsed))
Console.WriteLine("yyyy-MM-dd: {0}", parsed);
else if (DateTime.TryParseExact(d, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsed))
Console.WriteLine("dd-MM-yyyy: {0}", parsed);
}
如果您了解区域性,可以尝试使用DateTime.Parse方法。
因此,在这种文化中,只要01-01-2014
的意思始终是dd-mm-yyyy
或mm-dd-yyyy
,你就没事了。
既然您提到了处理多行数据文件,那么您可能应该DateTime.TryParse.TryParse
在无法解析日期的情况下不会抛出异常,这反过来也不会终止您的批处理过程。这允许您记录故障并在之后进行处理。
在所有情况下,不一致的日期格式都可能是一种痛苦。如果你知道你应该尝试使用一组特定的文化来转换(或者如果有一种方法可以从另一个领域确定文化),那么我建议你尝试做类似于以下的事情:
DateTime convertedDate;
var convertSuccessful = DateTime.TryParse(date, new CultureInfo("en-US"), DateTimeStyles.None, out convertedDate);//YYYY-MM-DD
if (!convertSuccessful)
{
DateTime.TryParse(date, new CultureInfo("en-GB"), DateTimeStyles.None, out convertedDate); // DD-MM-YYYY
}
注意:我认为"en-US"文化实际上是"mm-dd-yyyy",所以根据需要替换另一种文化或构建自己的文化-这个答案更多的是关于如果一种文化转换失败而不引发FormatException
,则可以使用的技术。
请确保月和日字段在输入文件中的位置一致。然后使用DateTime.Passe方法。