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