什么date格式擅长返回?

我正在做一个数据库,这将是全球性的,我正在从Excel文件中读取date。

parsingDateTime时,我使用本地机器的文化,并期望它们匹配。

d = DateTime.Parse(date, CultureInfo.CurrentCulture); 

不应该从Excel的date有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(); 

如果string格式符合CurrentCulture的标准date时间模式, DateTime.Parse成功parsingstring。

您可以在CurrentCulturefind所有标准的date时间模式,

 var array = CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns(); foreach (var item in array) { Console.WriteLine(item); } 

如果你的CurrentCulture和Paris的文化(我假设他们使用fr-FR文化)有相同的标准格式,将匹配你的string格式,你的parsing将是成功的。

是的,这正是我的想法–Excel正在给你一个适当的date,然后把它转换成string,并尝试做相反的事情。 相反,你想从数据表中直接得到date:

 DateTime date = (DateTime)dt.Rows[start][column]; 

请注意,对于null值,types将不是DateTime ,而是DBNull ,因此您首先需要检查:

 DateTime? date = dt.Rows[start][column] is DBNull ? default(DateTime?) : (DateTime)dt.Rows[start][column];