如何在Excel中将date转换为C#中的dd.MM.yyyy格式

在Excel表格中,date格式为dd.MM.yyyy 16.10.2011 (16日为dd,10为MM) 。 当我从Excel导入数据到SQL Server 2008时,我得到了MM.dd.yyyy但仍然是16.10.2011 (16为MM,10为dd) 。 这是不正确的。 我find了解决scheme:去SQL Server 2008 – >安全 – >login – > {用户属性} – >和更改用户的默认语言。 有了这个解决scheme,我在SQL Server 2008 dd.MM.yyyy 16.10.2011 (16日为dd,10为MM) 。 有没有其他方法可以在不改变用户语言的情况下以dd.MM.yyyy格式转换date?

 String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\JantarV7Export.xlsx;Extended Properties=Excel 8.0"; OleDbConnection olecon = new OleDbConnection(sConnectionString); olecon.Open(); OleDbCommand cmd = olecon.CreateCommand(); cmd.CommandText = "SELECT person_id, date_of_hours, number_of_hours FROM [Sheet1$]"; OleDbDataAdapter oda = new OleDbDataAdapter(cmd); OleDbDataReader odr = cmd.ExecuteReader(); conn.Open(); while (odr.Read()) { SqlCommand cmd1 = conn.CreateCommand(); cmd1.CommandText = "INSERT INTO test_data values (newid(),'" + odr[0] + "',@date_of_hours,'" + odr[2] + "')"; cmd1.Parameters.Add("@date_of_hours", SqlDbType.DateTime).Value =odr[1]; } cmd1.ExecuteNonQuery(); olecon.Close(); conn.Close(); 

我认为这个问题是当我插入到test_data 。 所以我可能应该在插入之前以某种方式转换date。 你有什么build议? 谢谢。 有没有这样的select:

 cmd1.CommandText = "INSERT INTO test_data values (newid(),'" + odr[0] + "',CONVERT(VARCHAR(20),@date_of_hours,104),'" + odr[2] + "')"; cmd1.Parameters.Add("@date_of_hours", SqlDbType.DateTime).Value =odr[1]; 

(这是不行的,因为在插入CONVERT,但有一些类似的解决scheme)或

 CONVERT(VARCHAR(20),@date_of_hours,104) AS [DD:MM:YYYY] 

更新在其他forms我通过combobox读取数据。 它显示2011年10月1日,2011年2月10日,…至2011年10月16日。

 da_test_data = new SqlDataAdapter("SELECT test_data_id, date_of_hours, number_of_hours FROM test_data WHERE _person_id= '" + person_id_person + "' ORDER BY date_of_hours", conn); dt_test_data = new DataTable(); da_test_data.Fill(dt_test_data); cb_datum.DataSource = dt_test_data.DefaultView; cb_datum.ValueMember = "test_data_id"; cb_datum.DisplayMember = "date_of_hours"; 

项目的combobox:

  private void cb_datum_SelectedIndexChanged(object sender, EventArgs e) { DataRowView drvProjekt = cb_datum.SelectedItem as DataRowView; if (drvProjekt != null) { string date1 = drvProjekt["date_of_hours"].ToString(); DateTime date2 = new DateTime(); date2 =Convert.ToDateTime(date1); //DateTime date = DateTime.ParseExact(date1, "MMddyyyy hh:mm:ss", null); //DateTime date = DateTime.ParseExact(date1, "dd.MM.yyyy", System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat); //object obj = DateTime.ParseExact(dddd, "MM/dd/yyyy hh:mm", null); conn = new SqlConnection(connectionString); conn.Open(); da_projekt = new SqlDataAdapter("SELECT projekt_id, name_of_projekt, date_of_start, date_of_end FROM projekt WHERE date_of_start < '" + date2 + "' AND date_of_end > '" + date2 + "' ", conn); dt_projekt = new DataTable(); da_projekt.Fill(dt_projekt); cb_projekt_id.DataSource = dt_projekt.DefaultView; cb_projekt_id.ValueMember = "projekt_id"; cb_projekt_id.DisplayMember = "name_of_projekt"; conn.Close(); } } 

当我select13.10.2011我得到错误。 date被识别为MM.dd.yyyy。 我试了一切(都在评论和更多)。 Yust找不到解决scheme。

正如我在评论中提到的那样。 您的date值在SQL中存储为Date 。 所以当你在SQL中存储date时,它只会保留date,当你检索它时,你将直接得到date对象。 在SQL中,它可能会显示为MM.dd.yyyy没关系。

当你从SQL读取这些数据的时候,你会得到DateTime对象,如果你使用.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture)你会得到dd.MM.yyyy格式。 您可以在DateTime对象上使用任何格式,在MSDN上阅读更多关于它的信息。

希望这回答你的问题。

如果可能,只需replace“。” 在excel文件中加“/”,格式化为dd / mmm / yyyy

Excel本身保持date为天,因为某些date我不记得作为浮点值。 重要的是这匹配DateTime.ToOADate()。

我们从excel文件读取date作为浮点值,然后使用DateTime.ToOADate()。

你用错误的方式使用CONVERT 。 在数据库方面,您将date时间转换为string(varchar),然后您必须依赖内置types转换才能再次获得date时间。 你应该反过来做。 如果在C#中,您将date时间转换为具有指定格式的string,并将其转换为具有匹配样式的date时间数据库端没有任何问题。

使用CONVERT ,date部分应与您使用的样式相匹配(在您的案例104中)。 在你的sql中使用这个:

 CONVERT(DATETIME, @date_of_hours, 104) 

 cmd1.Parameters.Add("@date_of_hours", SqlDbType.NVarChar).Value = string.Format("{0:dd.MM.yyyy}", odr[1])