【问题标题】:VB date conversionVB日期转换
【发布时间】:2008-11-06 18:32:22
【问题描述】:

有没有一种简单的方法来转换包含这个的字符串:

Date: Wed, 5 Nov 2008 13:12:12 -0500 (EST)

变成一个包含这个的字符串:

20081105_131212

更新:
我最终使用了类似于 tryParseExact 的 date.tryparse,除了您不必指定格式字符串。我确实必须消除 () 和 EST 才能使其正常工作。日期字符串将始终为 EST,因为日期字符串来自 1 个 Web 服务器。

原始字符串:

Date: Wed, 5 Nov 2008 13:12:12 -0500 (EST)

使用此代码:

buff1.Remove(0, 6).Replace("(", "").Replace(")", "").Replace("EST", "").Trim()

变成这个字符串:

Wed, 5 Nov 2008 13:12:12 -0500

然后我可以适当地格式化以使用这个来生成我的文件名日期:

 If Date.TryParse(buff1, dateValue) Then
   MsgBox(Format(dateValue, "yyyyMMdd_HHmmss"))
 Else
   MsgBox("nope")
 End If

【问题讨论】:

  • 这是 vb6、vba 还是 vb.net??
  • vb.net Visual Basic 2005
  • 如果您要假设它始终是 EST,您不妨缩短替换为这个 --> buff1.Remove(0, 6).Replace(" (EST)", "" )

标签: .net vb.net string .net-2.0 date


【解决方案1】:

在这种情况下,甚至比Date.Parse 更好的是Date.TryParseExact()。这会让你告诉框架你期望什么格式并返回一个布尔值,而不是在解析失败时抛出异常。

然后使用.ToString("yyyyMMdd_HHmmss") 获取所需的新字符串格式。

这是格式字符串参考,以备不时之需:
http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

最后,我注意到您忽略了 -500 时区偏移量。你确定你所有的字符串真的来自同一个时区吗?

【讨论】:

    【解决方案2】:

    如果 VB 是指 VB.NET,则可以使用 Date.Parse 后跟 ToString() 和格式字符串:

    Date.Parse(YourDateString).ToString("yyyyMMdd_HHmmss")
    

    注意:在解析字符串之前删除初始的“日期:”。

    【讨论】:

      【解决方案3】:

      对于纯 VB 解决方案,我会选择

      Function ConvertDateString(ByVal Original As String) As String
          Dim Elements As String() = Split(Original, " ")
          Dim DateString As String = Elements(3) & " " & Elements(2) & " " & Elements(4) & " " & Elements(5)
          Return Date.Parse(DateString).ToString("yyyyMMdd_HHmmsss")
      End Function
      

      您可以通过仅使用 Parase 中的连接字符串来消除 DateString。如果您的分辨率为 1024 x 768 或更大,它将适合一行。

      【讨论】:

        【解决方案4】:

        类似于@splattne 在 VB.NET 中的解决方案,但也进行了清理...

        Dim strDateVal As String = "Date: Wed, 5 Nov 2008 13:12:12 -0500 (EST)"
        strDateVal = strDateVal.Substring(strDateVal.IndexOf(", ") + 2, strDateVal.Length - strDateVal.IndexOf(", ") - 2)
        strDateVal = strDateVal.Substring(0, strDateVal.LastIndexOf(" ")).TrimEnd
        Dim DateVal As Date = Date.Parse(strDateVal)
        Dim NewStringVal As String = Format(DateVal, "yyyyMMdd_HHmmss")
        

        注意:这会忽略时区以匹配您的预期结果(根据问题中的示例数据)

        【讨论】:

          【解决方案5】:
          Dim strDateVal As String = "Date: Wed, 5 Nov 2008 13:12:12 -0500 (EST)"
          
          strDateVal = strDateVal.Substring(strDateVal.IndexOf(", ") + 2, 
          strDateVal.Length - strDateVal.IndexOf(", ") - 2)
          
          strDateVal = strDateVal.Substring(0, strDateVal.LastIndexOf(" ")).TrimEnd
          
          Dim DateVal As Date = Date.Parse(strDateVal)
          Dim NewStringVal As String = Format(DateVal, "ddMMyyyy_HHmmss")
          

          【讨论】:

            【解决方案6】:

            Format(date, "yyyyMMdd_HHmmss")

            更多关于format函数的帮助。

            【讨论】:

            • 那些应该是大写的H。
            • 另外,这适用于日期对象,但问题与需要清除的额外信息的特殊格式化字符串有关。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多