为什么这个DateTime.ParseExact语句不起作用?

时间:2016-04-12 17:14:43

标签: asp.net .net vb.net

以下行给出了“无法通过有效的DateTime识别字符串”错误:

DateTime.ParseExact("4/6/2016", "dd/MM/yyyy", Nothing)

我在stackoverflow上得到了这个“工作”示例,但它对我不起作用:Parse Exact Sample我无法找出原因。

编辑(reedit,我错误地输入了最后两次尝试错误): 仍然没有好处。这是我在尝试到目前为止提交的所有建议后发现的(感谢所有)。更多信息,日期字符串来自文本框控件。

Dim xxx As String = "4/6/2016"  'OR  = "04/06/2016" as necessary for the sample    

这不起作用:

DateTime.ParseExact(xxx, "M/d/yyyy", CultureInfo.InvariantCulture)

这不起作用:

DateTime.ParseExact(xxx, "MM/dd/yyyy", CultureInfo.InvariantCulture)

之后,我尝试了一些更简单的东西,只有DateTime.Parse:

DateTime.ParseExact(xxx)

我手动输入了这个。我没有使用文本框控件中的值,并且DID可以工作:

DateTime.Parse("4/6/‎2016‎")

太令人沮丧了

2 个答案:

答案 0 :(得分:6)

您的格式表示您的日期和月份都有两位数字。您的实际值只有一位数。

您有两种选择:

  • 按照您指定的格式,例如04/06/2016
  • 更改格式以匹配值,例如d/M/yyyy

此外 - 并且单独 - 您作为格式提供者传入Nothing,这意味着将使用当前文化。您的格式使用/,这是特定于文化的日期分隔符。如果您当前的文化没有使用/作为其日期分隔符,那就是另一个问题。如果您有固定格式,则可能需要指定CultureInfo.InvariantCulture作为格式说明符。

这是一个简短但完整的程序,证明它有效:

Option Strict On

Imports System
Imports System.Globalization

Public Class Test

    Shared Sub Main()
        Dim xxx As String = "4/6/2016"
        Dim result as DateTime = DateTime.ParseExact(xxx, "M/d/yyyy", CultureInfo.InvariantCulture)
        Console.WriteLine(result)
    End Sub

End Class

答案 1 :(得分:1)

当您使用ddMM时,它需要一个两位数字,因此您需要使用"04/06/2016"或者将其替换为d的单位数版本和M