You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.Net Framework4.8中带PM的字符串转Date无效问题求解

解决VB.Net从Access读取日期时的InvalidCastException错误

问题根源

你的代码有几个关键问题:

  1. 多余的类型转换:如果Field1在Access里是日期/时间类型,你先把它转成格式化字符串,再用CDate转回去,完全没必要,还引入了区域格式依赖问题。
  2. 格式不匹配:错误提示里的日期字符串带秒(06/23/2016 06:04:39 PM),但你用ToString("MM/dd/yyyy hh:mm tt")格式化时丢了秒部分,后续CDate解析时会因为格式不兼容报错。
  3. CDate依赖系统区域:如果你的系统默认日期格式不是MM/dd/yyyy(比如中文系统常用yyyy/MM/dd),直接转这种格式的字符串必然失败。

最优解决方案(数据库字段为日期类型时)

直接从DataReader读取日期类型,再格式化输出,跳过多余的字符串转Date步骤:

' 直接强转成Date类型,再按需要格式化字符串
menu.SubItems.Add(DirectCast(dr("Field1"), Date).ToString("MM/dd/yyyy hh:mm tt"))

如果需要处理字段为空的情况:

If Not dr.IsDBNull(dr.GetOrdinal("Field1")) Then
    Dim fieldDate As Date = DirectCast(dr("Field1"), Date)
    menu.SubItems.Add(fieldDate.ToString("MM/dd/yyyy hh:mm tt"))
Else
    menu.SubItems.Add("无日期")
End If

兼容字符串存储日期的方案

如果Field1在Access里是字符串类型存储的日期,用Date.TryParseExact指定精确格式和文化,彻底避免区域依赖:

Dim dateStr As String = dr("Field1").ToString().Trim()
Dim parsedDate As Date
' 匹配错误提示里的完整日期格式(带秒)
If Date.TryParseExact(dateStr, "MM/dd/yyyy hh:mm:ss tt", Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, parsedDate) Then
    menu.SubItems.Add(parsedDate.ToString("MM/dd/yyyy hh:mm tt"))
Else
    ' 转换失败时的兜底处理
    menu.SubItems.Add("无效日期")
End If

内容的提问来源于stack exchange,提问作者Jassim S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 14:19:52