在文本框中格式化日期

时间:2019-04-17 12:32:33

标签: vb.net

我真的需要帮助 我在表访问中将记录保存为字段Product_Date,类型为Text。 有时我只保存日期Product_Date的记录,例如年份(2007)或(1995)或(2019)。 使用我的代码,我试图使单击DataGridView1的日期显示在TextBox3中,如下所示:dd-MM-yyyy。它工作得很好,但是当我只用一年注册到行时就出现了问题 我将收到此错误消息:

Convertion from string "2007" to type "date" is not valid

如何避免此错误消息? 我的代码:

 Private Sub DataGridView1_Click(sender As Object, e As EventArgs) Handles DataGridView1.Click
    Try
        With DataGridView1.CurrentRow
            TextBox1.Text = .Cells("Product_Id").Value.ToString()
            TextBox2.Text = .Cells("Product_Nom").Value.ToString()
            TextBox3.Text = .Cells("Product_Date").Value.ToString()
            TextBox3.Text = Format(CDate(Convert.ToString(TextBox3.Text)), "dd-MM-yyyy")

        End With
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

1 个答案:

答案 0 :(得分:1)

您可能想尝试的是从数据库中读取此字符串并将其转换为DateTime对象,这样您就可以将其格式化为日期。要仅用一年的时间执行此操作,就可以使用DateTime.ParseExact方法。这是一个小例子。我对其进行了编辑,以包括字符串不只是一年的情况。可能有一种更好的方法(在Try中尝试Try并不是最好的选择),但我将由您自己决定。

Sub Main()
    Dim Dates() As String = {"2007", "2-29-2008", "5/29/2006"}
    Dim oDate As DateTime

    For i As Integer = 0 To 2

        'Try to parse as formatted date
        Try
            oDate = DateTime.Parse(Dates(i))

        Catch castEx As FormatException
            'Could not format normally, try treating as solely a year
            Try
                oDate = DateTime.ParseExact(Dates(i), "yyyy", Nothing)

            Catch ex As Exception
                Console.WriteLine(ex.Message)
                Continue For
            End Try

        End Try
        'Print converted date
        Console.WriteLine(oDate.ToString())
    Next
    Console.ReadLine()
End Sub

此处yyyy指定它仅读取一年值。 输出:

01/01/2007 12:00:00 AM 

但是请记住,日期时间的ToString方法已重载,因此,如果使用oDate.ToString("dd-MM-yyyy"),它将打印:

01-01-2007 

我以this page作为参考。

注意:这可以通过Date对象而不是DateTime来实现,因为它们共享相同的方法。

这不是存储/使用日期的最佳方法,在可能的情况下,应该使用实际的日期数据类型而不是数据库中的文本。如果还不算太晚,我建议您重新考虑一下您的专栏,但是,如果这时您无法控制,则可以采用此类解决方法。