簡體   English   中英

如何在excel中將日期轉換為C#中的dd.MM.yyyy格式

[英]How to Convert date into dd.MM.yyyy format in C# from excel

在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]

更新在其他形式我通過組合框讀取數據。 它顯示1.10.2011,2.10.2011,....至16.10.2011。

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。 我嘗試了一切(所有評論和更多)。 Yust找不到解決方案。

正如我在評論中提到的那樣。 您的日期值在SQL中存儲為Date 因此,當您在SQL中存儲日期時,它將僅保留日期,當您檢索它時,您將直接獲得日期對象。 在SQL中,它可能顯示為MM.dd.yyyy並不重要。

當您從SQL中讀取此數據時,您將獲得DateTime對象,如果您執行.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture)您將獲得dd.MM.yyyy格式。 您可以在DateTime對象上使用任何格式,在MSDN上閱讀有關它的更多信息。

希望這能回答你的問題。

如果可能,只需替換“。” 在excel文件中使用“/”並將單元格格式化為dd / mmm / yyyy

Excel本身將日期保留為自某個日期以來我不記得作為浮點值的日期。 重要的是,這匹配DateTime.ToOADate()。

我們從excel文件中讀取日期作為浮點值,然后使用DateTime.ToOADate()。

你以錯誤的方式使用CONVERT 在數據庫端,您將日期時間轉換為字符串(varchar),然后您必須依賴內置類型轉換來再次獲取日期時間。 你應該反過來做。 如果在c#中將datetime轉換為具有指定格式的字符串,並將其轉換為具有匹配樣式的數據庫端的日期時間,則不會出錯。

當您使用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])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM