我正在使用 MYSqlBulkLoader 将文本文件加载到 mysql 数据库表中。但是,文件中的日期格式为 mm/dd/yyyy,而 MySql 期望日期为 yyyy-mm-dd 格式。用正确格式替换文本文件中所有日期的最佳和最快方法是什么?另外,有没有办法让 MySql 接受日期格式 mm/dd/yyyy ?
问问题
468 次
4 回答
1
我没有使用过那个类,但它似乎无法即时转换类型。所以你真的需要用正确的格式替换所有不正确的格式。
一个简单的方法是重写文本文件,例如(假设它是一个csv文件,分隔符是逗号,日期列是第一个):
var newLines = File.ReadAllLines(path)
.Select(l => l.Split(','))
.Select(sp => new{
dt = DateTime.ParseExact(sp[0],"MM/dd/yyyy", CultureInfo.InvariantCulture),
rest = string.Join(",", sp.Skip(1))
})
.Select(x => string.Format("{0},{1}", x.dt.ToString("yyyy-MM-dd"), x.rest));
File.WriteAllLines(path, newLines);
但是,最好和最有效的方法是首先避免无效日期。
于 2013-09-07T19:58:32.247 回答
1
我建议您使用正确的日期格式(yyyy-mm-dd)重新生成数据文本文件,或者创建一些控制台应用程序,将该数据文本文件加载到内存中,进行所需的格式化操作,保存文件并而不是让你的批量插入。
于 2013-09-07T19:59:28.480 回答
1
你可以这样做:
DateTime.ParseExact("11-24-2011", "mm-dd-yyyy").ToString ("yyyy-MM-dd")
于 2013-09-07T19:49:34.600 回答
0
感谢您的回答。我想出了一种可能的方法。但是我不确定这是否是最佳方式。现在工作。如果有更好的方法,请告诉我。
var newLines = File.ReadAllLines(fileName);
for (int i = 0;i<newLines.Length;i++)
{
Regex regex = new Regex(@"[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}");
foreach (Match match in regex.Matches(newLines[i]))
{
string modifiedDate = DateTime.Parse(match.Value).ToString("yyyy-MM-dd");
newLines[i] = newLines[i].Replace(match.Value, modifiedDate);
}
}
File.WriteAllLines(fileName, newLines);
于 2013-09-08T03:29:47.223 回答