字符串的日期转换无效

时间:2017-11-20 08:27:18

标签: vb.net

如下所示,我在尝试从字符串转换日期时看到以下错误。奇怪的是,相同的代码在配置了相同区域的其他服务器上正常工作。此外,如果我从控制台应用程序运行此代码它工作。仅在Windows服务中计划时才会发生此错误。为什么会这样?有更好的方法吗?

包含调试信息的代码: enter image description here

Try
   Dim fileDateStr = Data(0, 0).ToString()
   fileDateStr = fileDateStr.Substring(0, fileDateStr.IndexOf("(", StringComparison.Ordinal))

       Dim dateValue As Date
               If Date.TryParse(CDate(fileDateStr), dateValue) Then
                   ReportDate = CDate(fileDateStr)
               End If
Catch ex As Exception
 ..

2 个答案:

答案 0 :(得分:1)

您尝试在使用Date.TryParse之前使用CDate将字符串值转换为日期!

因此,只有Date.TryParse有效时才能使用以下代码设置日期:

Dim fileDateStr = Data(0, 0).ToString()
fileDateStr = fileDateStr.Substring(0, fileDateStr.IndexOf("(", StringComparison.Ordinal))

Dim dateValue As Date

If Date.TryParse(fileDateStr, dateValue) Then
    ReportDate = dateValue
End If

如果fileDateStr始终使用相同的格式(例如MM/dd/yyyy - Date.TryParseExact),您也可以使用more details how to create a format string

Dim fileDateStr = Data(0, 0).ToString()
fileDateStr = fileDateStr.Substring(0, fileDateStr.IndexOf("(", StringComparison.Ordinal))

Dim dateValue As Date

If Date.TryParseExact(fileDateStr, "MM/dd/yyyy", CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dateValue) Then
    ReportDate = dateValue
End If

如果fileDateStr有多种有效格式,您也可以使用Date.TryParseExact

Dim fileDateStr = Data(0, 0).ToString()
fileDateStr = fileDateStr.Substring(0, fileDateStr.IndexOf("(", StringComparison.Ordinal))

Dim dateValue As Date
Dim formats As String() = {"MM/dd/yyyy", "yyyy-MM-dd"}

If Date.TryParseExact(fileDateStr, formats, CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dateValue) Then
    ReportDate = dateValue
End If

答案 1 :(得分:1)

正如Sebastian Brosch的回答所述,在将字符串解析为日期之前,您需要进行转换。

作为服务运行时无法转换的原因可能是运行服务的用户的不同文化/区域设置。 根据这些设置" 11/16/2017"不会被TryParse解析。

如果fileDateStr的格式始终为" MM / dd / yyyy",那么您可以使用 而是TryParseExact

Dim fileDateStr = Data(0, 0).ToString()
fileDateStr = fileDateStr.Substring(0, fileDateStr.IndexOf("(", StringComparison.Ordinal))

Dim dateValue As Date

If Date.TryParseExact(fileDateStr,
                      "MM/dd/yyyy",
                      CultureInfo.InvariantCulture,
                      DateTimeStyles.None,
                      dateValue) Then

    ReportDate = dateValue
End If