如何从excel将日期转换为C#中的dd.MM.yyyy格式

本文关键字:中的 dd MM 格式 yyyy 转换 excel 日期 | 更新日期: 2023-09-27 18:22:17

在excel表格中,我的日期格式为dd.MM.yyyy 16.10.2011(16表示dd,10表示MM)。当我将数据从excel导入SQL Server 2008时,我得到了MM.dd.yyyy,但仍然是16.10.2011(16表示MM,10表示dd)。这是不对的。我找到了解决方案:转到SQL Server 2008->安全->登录->{用户属性}->并更改用户的默认语言。使用此解决方案,我在SQL Server 2008 dd.MM.yyyy 16.10.2011(16表示dd,10表示MM)中获得。有没有其他方法可以在不更改用户语言的情况下将日期转换为dd.MM.yyyy格式?

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数据表的时候。所以我可能应该在插入之前以某种方式转换日期。你有什么建议?谢谢有这样的选择吗:

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,但有类似的解决方案吗)或

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

更新在其他形式中,我通过组合框读取数据。显示为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";

项目的组合框

 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();
      }
 }

当我选择13.10.2011我得到错误。日期被识别为MM.dd.yyyy。我尝试了一切(都在评论中,还有更多)。你找不到解决办法。

如何从excel将日期转换为C#中的dd.MM.yyyy格式

正如我在评论中提到的。您的日期值在SQL中存储为Date。所以,当您在SQL中存储日期时,它将只保留日期,而当您检索它时,您将直接获得日期对象。在SQL中,它可能显示为MM.dd.yyyy,这无关紧要。

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

希望这能回答你的问题。

如果可能,只需将excel文件中的"."替换为"/",并将单元格格式设置为dd/mm/yyyy

Excel本机将日期保存为天,因为我不记得某个日期是浮点值。重要的是它与DateTime.ToOADate().匹配

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

您使用CONVERT的方式不对。在数据库方面,您可以将日期时间转换为字符串(varchar),然后必须依靠内置类型转换才能再次获得日期时间。你应该反过来做。如果在c#中,您将日期时间转换为具有指定格式的字符串,并将其转换为具有匹配样式的数据库端的日期时间,则不会出错。

当您使用CONVERT时,日期部分应与您使用的样式相匹配(在您的案例中为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])