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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:09:01