VB.NET拆分日期时间字符串并计算最近7天总时长问题求助
问题核心缺陷
- 最近7天日期生成逻辑错误:直接对
dd格式的日数字做减法,跨月/跨年场景会生成无效日期,比如当月1日减1会得到xxxx-xx-00的非法值 - 原始数据拆分逻辑错误:循环中反复修改RichTextBox文本,将日期、时间拆分后全部追加到同一个Lines数组中,既会出现下标越界风险,也无法正确对应日期和时间的映射关系
- 嵌套判断逻辑完全错误:所有判断为串行嵌套,只有前一个日期匹配失败才会进入下一个日期的判断,且存在
o5 = o5的恒成立笔误,完全无法实现日期一一匹配的需求 - 变量类型错误:行计数
x被定义为String类型,后续做数组下标运算会触发类型转换异常
正确实现方案
核心思路:先把原始行数据转换为「日期-时长」映射字典,再生成合法的最近7天日期列表,遍历匹配累加即可,无需修改控件原有内容。
' 1. 解析原始行数据,生成日期和时长的映射字典 Dim dateTimeDict As New Dictionary(Of String, TimeSpan) For Each line As String In RichTextBox4.Lines If String.IsNullOrWhiteSpace(line) Then Continue For Dim parts = line.Split({" "c}, StringSplitOptions.RemoveEmptyEntries) If parts.Length >= 2 AndAlso TimeSpan.TryParse(parts(1), Nothing) Then dateTimeDict(parts(0)) = TimeSpan.Parse(parts(1)) End If Next ' 2. 正确生成最近7天的日期字符串,自动处理跨月、跨年场景 Dim recent7Days As New List(Of String) For i As Integer = 0 To 6 recent7Days.Add(Date.Now.AddDays(-i).ToString("yyyy-MM-dd")) Next ' 3. 累加所有日期的时长,不存在的日期默认按0计算 Dim totalDuration As New TimeSpan(0) For Each dayStr In recent7Days If dateTimeDict.ContainsKey(dayStr) Then totalDuration = totalDuration.Add(dateTimeDict(dayStr)) End If Next ' 输出最终总时长 MsgBox(totalDuration.ToString())
内容的提问来源于stack exchange,提问作者Break Inside
相关产品推荐
相关产品推荐

