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

VB.Net如何从CSV文件中获取日期列的最小、最大日值

问题原因

你当前的代码存在两个核心错误:

  • Min、Max是面向集合的聚合统计方法,你在单个日期转换得到的dd格式字符串上调用这两个方法,实际是在取字符串中单个字符的最小/最大ASCII值,和提取日期最小值、最大值的需求完全不符。
  • 每次循环都会直接覆盖两个属性的值,没有做累计比较的逻辑,循环结束后两个属性只会保留最后一行数据的计算结果。

修复方案

你可以先收集所有有效日期的日数值,再统一计算最小最大值,示例代码如下:

' 存储所有提取到的日数值
Dim dayValues As New List(Of Integer)()
' 读取CSV跳过表头
Dim csvLines = IO.File.ReadAllLines("my.csv").Skip(1)

For Each line In csvLines
    Dim cols = line.Split(";"c)
    ' 用TryParse避免日期格式异常崩溃,可根据实际情况替换为TryParseExact指定日期格式
    If Date.TryParse(cols(2), Nothing, Globalization.DateTimeStyles.None, Dim currentDate) Then
        dayValues.Add(currentDate.Day)
    End If
Next

' 有有效数据时赋值属性,转换为两位字符串格式
If dayValues.Any() Then
    FirstDayOfCsv = dayValues.Min().ToString("00")
    LastDayOfCsv = dayValues.Max().ToString("00")
End If

如果不想额外存储所有日数值,也可以在循环过程中动态更新最小/最大值:

Dim minDay As Integer = Integer.MaxValue
Dim maxDay As Integer = Integer.MinValue
Dim csvLines = IO.File.ReadAllLines("my.csv").Skip(1)

For Each line In csvLines
    Dim cols = line.Split(";"c)
    If Date.TryParse(cols(2), Nothing, Globalization.DateTimeStyles.None, Dim currentDate) Then
        Dim currentDay = currentDate.Day
        minDay = Math.Min(minDay, currentDay)
        maxDay = Math.Max(maxDay, currentDay)
    End If
Next

If minDay <= maxDay Then
    FirstDayOfCsv = minDay.ToString("00")
    LastDayOfCsv = maxDay.ToString("00")
End If

补充说明

如果CSV中的日期格式不是系统默认格式,建议使用Date.TryParseExact指定确切的格式,避免解析失败,例如CSV日期格式为yyyy/MM/dd时,写法如下:

Date.TryParseExact(cols(2), "yyyy/MM/dd", Nothing, Globalization.DateTimeStyles.None, currentDate)

内容的提问来源于stack exchange,提问作者Иван Олександров

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:57:02