我有一个C#应用程序从.DBF文件导入数据,并将其插入SQL Server。文件中有一个带有可怕MM/dd/yy
格式的DOB列。我只使用Convert.ToDateTime,大多数数据转换为1900年代,就像我预期的那样。有一些记录没有正确转换,并且有30年后出生的人。如何强制转换仅编写MM/dd/19XX
?
因此,例如.DBF文件12/29/29
中的此日期将转换为12/29/2029
。
我正在读取.DBF文件:
var fileInfo = new System.IO.FileInfo(dbfPath);
string dsPath = fileInfo.DirectoryName.ToString();
DataSet DSResult = new DataSet();
using (OleDbConnection cn = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data Source=" + dsPath + ";" + //Set the Data Sourde = to the directory of the file.
@"Extended Properties=dBASE III;"))
using (OleDbCommand cm = cn.CreateCommand())
{
cn.Open();
cm.CommandText = "SELECT * FROM UPDATED"; //Specify the file name for the select statement.
using (OleDbDataAdapter dba = new OleDbDataAdapter(cm))
{
dba.Fill(DSResult);
}
}
return DSResult;
答案 0 :(得分:4)
您可以更改Calendar.TwoDigitYearMax属性以更改100年范围的最后一年。
DateTimeFormatInfo formatProvider = new DateTimeFormatInfo();
formatProvider.Calendar.TwoDigitYearMax = DateTime.Now.Year;
DateTime date = DateTime.ParseExact("12/12/22", "MM/dd/yy", formatProvider);
答案 1 :(得分:0)
如果您知道重试日期的确切格式,那么您可以使用DateTime结构的ParseExact()或TryParseExact()方法来正确转换日期表示。
需要额外的foramt字符串参数来完全按照您想要的方式进行解析。
dateString = "Sun 15 Jun 2008 8:30 AM -06:00"; // your date string
format = "MM/dd/yy"; // format string
try {
result = DateTime.ParseExact(dateString, format, provider);
}
但是评论中提到的数据窗口可能是个问题