我正在制作一个将是全局的数据库,我正在从excel文件中读取日期。
我在解析DateTime时使用了本地机器的区域性,并期望它们能够匹配。
d = DateTime.Parse(date, CultureInfo.CurrentCulture);
excel中的日期不应该是CurrentCulture
格式吗?
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ src +
";Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"");
OleDbDataAdapter da = new OleDbDataAdapter("select * from [data$]", con);
DataSet ds = new DataSet();
da.Fill(ds);
dt = ds.Tables[0];
rows = dt.Rows.Count;
columns = dt.Columns.Count;
string date = dt.Rows[start].ItemArray[column].ToString();
是的,这正是我所想的- Excel给你一个适当的日期,然后你将其转换为字符串,并尝试做相反的再次。相反,您希望直接从数据表中获取日期:
DateTime date = (DateTime)dt.Rows[start][column];
请注意,对于null
值,类型将不是DateTime
,而是DBNull
,因此您需要首先检查:
DateTime? date = dt.Rows[start][column] is DBNull
? default(DateTime?)
: (DateTime)dt.Rows[start][column];
DateTime.Parse
如果字符串格式符合CurrentCulture
的标准日期时间模式之一,则成功解析字符串。
您可以在CurrentCulture
中找到所有标准日期时间模式,例如;
var array = CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns();
foreach (var item in array)
{
Console.WriteLine(item);
}
如果您的CurrentCulture
和Paris的文化(我假设它们使用fr-FR
文化)具有与您的字符串格式匹配的相同标准格式,则解析将成功。