什么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。
您可以在CurrentCulture
find所有标准的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];