0

我正在使用 MYSqlBulkLoader 将文本文件加载到 mysql 数据库表中。但是,文件中的日期格式为 mm/dd/yyyy,而 MySql 期望日期为 yyyy-mm-dd 格式。用正确格式替换文本文件中所有日期的最佳和最快方法是什么?另外,有没有办法让 MySql 接受日期格式 mm/dd/yyyy ?

4

4 回答 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 回答