0

我正在从 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

如何重新格式化插入/更新到数据库的日期,同时保持此处使用的日期的完整性?

提前致谢

4

3 回答 3

3

用于DateTime.Parse将新字符串转换回 Date 对象,然后您可以使用ToString("yyyy-MM-dd hh:mm:ss")

您还可以使用DateTime.ParseExact创建日期对象,并准确指定日期对象在字符串中的格式,如下所示:

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")
于 2012-10-02T12:04:14.757 回答
3

使用参数化 查询进行更新:

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

如果这不能正确解析 TextBox 中的日期,请预先解析它:

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")

这可能更容易阅读。

于 2012-10-02T12:11:13.757 回答
2

尝试将文本框中的文本转换为 DateTime 类型,然后将其格式化为 MySql 标准。然后在您的插入和更新语句中使用该字符串。

Convert.ToDateTime(textBox.Text).ToString("yyyy-MM-dd") 
于 2012-10-02T12:32:05.493 回答