1

为什么 CDate 和 parseExact 将今天的日期(10 月 3 日)(表示为 03/10/2012)变成 10/03/2012?我正在使用 Windows 7,VS2012。我在控制面板中的所有设置都是 UK/GB。我试过添加这些行

    System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-GB", True)
    System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("en-GB", True)

没有效果。

这是我的代码 - 你会看到我必须求助于交换文本版本的日期和月份才能获得我想要的日期

    dim txtDate As String = "03/10/2012"
    Dim strOriginalDate As String = txtDate   ' 03/10/2012
    Dim dtmdate1 As Date = CDate(txtDate)     ' #10/03/2012#
    Dim dtmdate2 As Date = DateTime.ParseExact(txtDate, "dd/MM/yyyy", Nothing) ' #10/03/2012#
    txtDate = Split(txtDate, "/")(1) & "/" & Split(txtDate, "/")(0) & "/" & Split(txtDate, "/")(2)
    Dim dtmdate3 As Date = CDate(txtDate)     ' #3/10/2012#
4

1 回答 1

1

我怀疑您正在查看调试器的 Locals 窗格中的日期值。如果您实际写出这些值,您会发现它们是所需的:

Module Module1

    Sub Main()
        System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-GB", True)
        System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("en-GB", True)

        Dim txtDate As String = "03/10/2012"
        Dim strOriginalDate As String = txtDate
        Dim dtmdate1 As Date = CDate(txtDate)
        Console.WriteLine(dtmdate1.ToString("dd MMM yyyy"))

        Dim dtmdate2 As Date = DateTime.ParseExact(txtDate, "dd/MM/yyyy", Nothing) ' #10/03/2012#
        Console.WriteLine(dtmdate2.ToString("dd MMM yyyy"))
        txtDate = Split(txtDate, "/")(1) & "/" & Split(txtDate, "/")(0) & "/" & Split(txtDate, "/")(2)

        Dim dtmdate3 As Date = CDate(txtDate)
        Console.WriteLine(dtmdate3.ToString("dd MMM yyyy"))

        Console.ReadLine()

    End Sub

End Module

当然,最后一行的输出并不理想,因为您已经交换了月份和日期。

在设置为 en-GB 的 W7 x64 上使用 VS2012 RC 进行测试。您可能想通过设置 VS 的语言环境进行测试:http: //msdn.microsoft.com/en-US/library/9cytz106%28v=vs.80%29.aspx

将日期显示为日期文字与数据文字的定义方式完全一致,例如参见日期数据类型 (Visual Basic)的格式要求小节

于 2012-10-03T20:32:49.573 回答