【问题标题】:Local time String to DateTime本地时间字符串到日期时间
【发布时间】:2017-08-14 09:21:25
【问题描述】:

我正在阅读 .csv 文件,其中字符串值具有本机 (авг=aug) 月份名称 (datestring):“01-авг-17 00:00:00”,但不是“авг”,而是正确的本地月份用我的母语命名。使用以下代码我试图将其转换为日期时间格式,但它不起作用:

Public Shared Function GetDateTime(ByVal datestring As String) As Date

        Dim format As String = {"dd-MMM-yy HH:mm:ss"}
        Dim result As Date
        If Date.TryParseExact(datestring, format, CultureInfo.InvariantCulture, Nothing, result) Then
            Return result.ToString
        Else
            MsgBox(datestring & " is not in the correct format")
            Return Nothing
        End If
    End Function

由于某些原因,程序转到“else”语句。如果我使用英语等效的“aug”,它可以正常工作。我怎么解决这个问题?我试图使用类似 "CultureInfo.CreateSpecificCulture("ru-RU") 的东西,但它没有用。

更新

我希望能够使用不同的 csv 文件,其中可以包含不同语言(eng 或 ru)的月份名称。所以我明白我可以使用以下语句(俄语):

Date.TryParseExact(datestring, formats, New CultureInfo("ru-RU"), DateTimeStyles.None, result) 

所以对于英语,我需要使用New CultureInfo("en-US") 之类的东西。但是,为什么CultureInfo.InvariantCulture 不起作用?我可以使用几个 if 条件来应用不同的文化设置。你知道“智能”解决方案吗?如何轻松转换英文或俄文的月份名称?

【问题讨论】:

  • 从屏幕截图看问题可能是 .csv 编码
  • 我从 Ansi 改成了 Unicode,显示没有问号,谢谢,但问题还是没有解决。
  • 删除“格式”字符串定义中的大括号有帮助吗?
  • 不,实际上我使用了大量的字符串,但为了更简单,我删除了所有不必要的字符串格式。
  • @badscrool 你在改版后尝试过俄罗斯文化吗?

标签: vb.net datetime tryparse


【解决方案1】:

您的函数似乎是Date 类型,但您返回的是一个字符串 (Return result.ToString)。因此,我假设您希望返回 string。如果是这样,这应该适合你:

Public Shared Function GetDateTime(datestring As String) As String
  Dim ru As New System.Globalization.CultureInfo("ru-RU")
  Dim format As String = "dd-MMM-yy HH:mm:ss"
  Dim result As System.DateTime = Nothing
    If DateTime.TryParse(datestring, result) Then
        Return result.ToString(format, ru)
    Else
        Return Nothing
    End If
End Function

【讨论】:

  • 不幸的是,它没有帮助。我附上了截图
猜你喜欢
  • 2014-02-22
  • 2011-06-13
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 2022-01-03
相关资源
最近更新 更多