VB.NET中使用IsDate处理仅含时间的字符串问题
解决方案
要实现仅时间字符串返回空值的需求,你可以在原代码基础上增加仅时间格式校验的逻辑:先确认输入能被解析为DateTime,再判断原字符串是否仅符合时间格式,若是则将InvoiceDate设为空字符串,否则保留解析后的日期时间值。
修改后的代码示例
Dim InvoiceDate As String = Nothing Dim parsedDate As DateTime If IsDate(strInvoiceDate) Then parsedDate = CDate(strInvoiceDate) ' 定义需要匹配的常见时间格式(可根据实际场景调整) Dim timeFormats() As String = { "HH:mm", "HH:mm:ss", "h:mm tt", "h:mm:ss tt", "HHmm", "hmm tt" } ' 尝试用时间格式解析原字符串,判断是否仅为时间 Dim isOnlyTime As Boolean = DateTime.TryParseExact( strInvoiceDate, timeFormats, System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, parsedDate ) If isOnlyTime Then InvoiceDate = "" Else ' 可根据需求指定日期时间输出格式,比如 "yyyy-MM-dd HH:mm:ss" InvoiceDate = parsedDate.ToString() End If End If
逻辑说明
- 保留原有校验:先用你自定义的
IsDate函数确认输入可被解析为DateTime类型。 - 仅时间校验:通过
DateTime.TryParseExact匹配预定义的时间格式,若匹配成功则判定为仅时间字符串。 - 结果赋值:根据校验结果,仅时间时设
InvoiceDate为空,否则赋值为解析后的日期时间字符串。
注意事项
- 可根据业务场景的时间格式,调整
timeFormats数组中的格式项(比如添加24小时制/12小时制的不同变体)。 - 若需适配多区域语言,可将
CultureInfo.CurrentCulture替换为指定的区域信息(如New CultureInfo("en-US"))。
内容的提问来源于stack exchange,提问作者Parangat
相关产品推荐
相关产品推荐

