2012-10-02 79 views
0

我從MySQL中取出日期值並以本地使用的格式顯示它們。請看下圖:日期格式.NET到mysql

我有這個時間值2012-11-01 08:00:00 ... YYYY-MM-DD HH:MM:SS

我需要這表現爲01-11-2012 08:00:00 ... DD-MM-YYYY HH:MM:SS

我能做到這一點足夠簡單如下:

Dim dr As MySqlDataReader = cmd.ExecuteReader(sql) 

If dr.Read() 
    Dim mydate As DateTime = dr("date_column") 

    txtDate.Text = mydate.ToString("dd-MM-yyyy") & " " & mydate.ToString("HH:mm:ss") 
End If 

此作品不夠好,但我的問題是,如果我想更新從這個文本框記錄,我不能使用這種格式的日期,因爲mysql抱怨錯誤(對象超出範圍或某事)。

所以我現在需要做的是將其轉換回yyyy-MM-dd。這裏的困難在於,.NET會自動假定我的dd值應該是MM的值,反之亦然。

這導致01-11-2012的值作爲11-01-2012寫入數據庫。

我該如何重新格式化插入/更新到數據庫的日期,同時保持這裏使用的日期的完整性?

在此先感謝

+0

請注意,顯示日期時不需要字符串連接。你可以直接使用mydate.ToString(「dd-MM-yyyy HH:mm:ss」)來獲得你想要的格式,而無需再次調用ToString。 –

回答

3

使用parameterizedquery的更新:

query = "UPDATE SomeTable SET date_column = @newDate WHERE record_id = @record_id" 
conn = new SqlConnection("my connection string") 

cmd = new SqlCommand(query, conn) 
cmd.Parameters.Add("newDate", SqlDbType.DateTime).Value = new Date(txtDate.Text) 
cmd.Parameters.Add("record_id", SqlDbType.Int).Value = record_id 

'Rest of code to execute cmd 

如果不解析從文本框正確的日期,以事先對其進行分析:

Date.ParseExact(txtDate.Text, "dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture) 

此外,該行:

txtDate.Text = mydate.ToString("dd-MM-yyyy") & " " & mydate.ToString("HH:mm:ss") 

也可以寫爲:

txtDate.Text = mydate.ToString("dd-MM-yyyy HH:mm:ss") 

這可能更容易閱讀。

+0

謝謝先生,您發現我用iFormatProvider參數的問題:)如何選擇一個答案雖然... – Ortund

+0

要接受一個有用的答案,點擊複選標記大綱(在投票總數下面)。 :) – pete

+0

大聲笑我知道該怎麼做......但你的回答和JMK的回答幾乎完全一樣。你的問題涉及到最佳實踐的明確指示,儘管 – Ortund

2

使用DateTime.Parse到新的字符串轉換回Date對象,然後就可以使用ToString("yyyy-MM-dd hh:mm:ss")

您還可以使用DateTime.ParseExact創建日期對象插回到MySQL和當日指定對象究竟是如何在字符串中的格式如下所示:

Imports System.Globalization 

Dim myNewDate As DateTime 
myNewDate = DateTime.ParseExact("23-05-2012 15:45:35", "dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture) 

//InsertIntoMySQL is whetever method you use to insert into MySQL 
InsertIntoMySQL("yyyy-MM-dd HH:mm:ss") 
+0

重載解析失敗,因爲沒有可訪問的'ParseExact'接受這個數量的參數 – Ortund

+0

抱歉,從內存工作,更新了答案! – JMK

2

嘗試將文本框中的文本轉換爲DateTime類型,然後將其格式化爲MySql標準。然後在插入和更新語句中使用該字符串。

Convert.ToDateTime(textBox.Text).ToString("yyyy-MM-dd")