【问题标题】:VB.NET Substring function broken [closed]VB.NET Substring 函数损坏[关闭]
【发布时间】:2021-04-06 11:20:34
【问题描述】:

我对 Substring 函数有疑问。正如您在 Watch window shcreenshot 上看到的那样,我有一个名为 val 的变量,它等于 ‎03.‎09.‎2015 ‏‎17:30

我不明白为什么,但是

val.Substring(0,2) returns 0 instead of 03
val.Substring(0,3) returns 03 (string of two symbols)

我做错了什么?

【问题讨论】:

  • 您是否点击了这两个表达式的“重新加载”按钮?
  • 顺便说一句,你不应该使用字符串方法来解析这个Date,而是Date.Parse/Date.ParseExact/Date.TryParse/Date.TryParseExact。然后你就有了你需要的一切(例如日期、小时、分钟等)
  • 是的,我重新加载了表达式
  • 将您的值粘贴到 dotnet fiddle 后,发现您那里有不可见的字符 dotnetfiddle.net/ZEsy3n
  • 最初的问题在于 Parse(和 Parse-like)函数。它无法将此字符串解析为日期或日期时间

标签: vb.net substring


【解决方案1】:

您的字符串包含不可打印的字符。请注意您的屏幕截图中的以下内容:

val = "03.09.2015 17:30"
val.Length = 21

但是,03.09.2015 17:30 只有 16 个字符。因此,该字符串包含其他零宽度字符。

要找出罪魁祸首,请输出有问题的字符串的hex dump,并将其与文字字符串03.09.2015 17:30 的十六进制转储进行比较。

【讨论】:

  • 不可打印字符甚至出现在问题的字符串中(至少有四个)。
【解决方案2】:

来自 OP 评论:

最初的问题在于 Parse(和 Parse-like)函数。它无法将此字符串解析为日期或日期时间

一旦从字符串中删除不可见字符,它肯定可以被解析:

Dim d As Date = DateTime.Parse("03.09.2015 17:30", Globalization.CultureInfo.InvariantCulture)
Dim m As Integer = d.Month    ' m = 3

当然,选择最适合您需求的特定 Parse 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    相关资源
    最近更新 更多