我正在创建一个全局数据库,我正在从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();
答案 0 :(得分:3)
是的,这正是我的想法 - 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];
答案 1 :(得分:2)
DateTime.Parse
的标准日期时间模式之一,则 CurrentCulture
会成功解析您的字符串。
您可以在CurrentCulture
中找到所有标准日期时间模式;
var array = CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns();
foreach (var item in array)
{
Console.WriteLine(item);
}
如果您的CurrentCulture
和巴黎文化(我假设他们使用fr-FR
文化)具有与您的字符串格式相同的标准格式,那么您的解析将会成功。