VB.Net Date.ParseExact文化问题

VB.Net Date.ParseExact文化问题,vb.net,Vb.net,我正在使用vb.net,我使用以下函数创建了一个月列表(3个字符表示) Public Function getMonths() As Array Dim months As String = "" For i = 1 To 12 months += StrConv(MonthName(i, True), VbStrConv.ProperCase) + "," Next months = months.Substring(0, months.Leng

我正在使用vb.net,我使用以下函数创建了一个月列表(3个字符表示)

Public Function getMonths() As Array
    Dim months As String = ""
    For i = 1 To 12
        months += StrConv(MonthName(i, True), VbStrConv.ProperCase) + ","
    Next
    months = months.Substring(0, months.Length - 1)
    getMonths = months.Split(",")
End Function
这工作得很漂亮,因为我正在建设的网站可以随时改变语言等

但是,当我尝试将月份更改回数值以使用此函数进行处理时

Public Function monthToNumber(ByVal monthin As String, ByVal culture As System.Globalization.CultureInfo) As Integer
    monthToNumber = DateTime.ParseExact("01/" + monthin + "/1999", "dd/MMM/yyyy", culture).Month
End Function
,date.ParseExact抛出日期输入异常,该异常不在有效字符串中


这个月是由文化生产的,所以我不能理解失败。这只发生在{pt}的文化中。该过程适用于西班牙、英国、法国和意大利。

如果使用
DateTime.ParseExact
,则必须使用正确的

对于
pt
,它不是
/
,而是
-

/
可以作为默认值
日期分隔符
,但仅当您使用
CultureInfo.InvariantCulture
时。但是如果你这样做了,你就不能解析特定于文化的日期缩写

这就是你的代码失败的原因


生成月份缩写,简单使用或;不需要自己编写方法

此外,你还应该研究(另一件你不必重新发明的事情)

为了重新解析字符串,可以使用

monthToNumber = DateTime.ParseExact(monthin, "MMM", culture).Month
如果您只需对格式字符串使用
MMM
,则不需要天/年