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

VB.Net中转换"yyyy-MM-dd HH:mm tt"格式字符串为DateTime报错求助

问题解决:DateTime字符串转换失败的原因及修复

核心问题

你的日期字符串开头存在不可见的控制字符(比如U+200E左到右标记),肉眼无法察觉,但会导致TryParseExact无法匹配格式。把字符串复制到Notepad++这类支持显示所有字符的编辑器里,就能看到这个隐藏字符。

修复步骤

  1. 清理不可见字符:先过滤掉字符串里的非打印控制字符,只保留可见的日期相关内容。
  2. 匹配正确格式:你的示例时间是7:20 PM,属于12小时制的单数小时,对应格式应为yyyy-MM-dd h:mm tt(小写h表示12小时制,不补前导零)。

修正后的代码

Dim DateTimeNow As DateTime = Now
Dim str As String = "‎2019-09-20 7:20 PM"
' 过滤不可见控制字符,只保留有效字符
Dim cleanedStr As String = String.Join("", str.Where(Function(c) Char.IsLetterOrDigit(c) Or " :-APM".Contains(c)))

Dim possibleDateFormat As String() = {"yyyy-MM-dd h:mm tt", "yyyy-MM-dd hh:mm tt"}

If DateTime.TryParseExact(cleanedStr, possibleDateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, DateTimeNow) Then
    Console.WriteLine("Format good")
Else
    Console.WriteLine("Format Error")
End If

补充说明

如果确定隐藏字符只在字符串开头,也可以用Trim或指定索引截取内容,但通用的字符过滤方式能处理任意位置的不可见控制字符,适用性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:33:30