VB.NET计算停车时长报错,寻求代码调试解决方案
VB.NET停车时长计算错误修正
你的代码核心问题是拿格式化后的字符串做减法运算,字符串不支持算术操作,这是报错的根本原因。正确的做法是用解析成功的DateTime对象计算时间差,以下是修正后的代码和说明:
问题点拆解
- 你把解析后的DateTime转成了字符串
display/display2,然后试图用这两个字符串相减,这在VB.NET里是不允许的 - 没有处理时间解析失败的情况,直接计算会引发额外错误
修正后的代码
' 入场时间处理 Dim entered As String = txtHourEnter.Text + ":" + txtMinEnter.Text Dim entryTime As DateTime Dim displayEntry As String = "Invalid entry" Dim isEntryValid As Boolean = DateTime.TryParse(entered, entryTime) If isEntryValid Then displayEntry = entryTime.ToString("h:mm tt") End If lblTimeIn.Text = displayEntry ' 离场时间处理 Dim exited As String = txtHourExit.Text + ":" + txtMinExit.Text Dim exitTime As DateTime Dim displayExit As String = "invalid entry" Dim isExitValid As Boolean = DateTime.TryParse(exited, exitTime) If isExitValid Then displayExit = exitTime.ToString("h:mm tt") End If lblTimeOut.Text = displayExit ' 计算停车时长 Dim parkingTimeDisplay As String = "请输入有效时间" If isEntryValid AndAlso isExitValid Then ' 用DateTime对象计算时间差,得到TimeSpan Dim parkingDuration As TimeSpan = exitTime - entryTime ' 格式化显示时长,比如小时:分钟,D2确保分钟为两位格式 parkingTimeDisplay = $"{parkingDuration.Hours}:{parkingDuration.Minutes:D2}" End If lblParkingTime.Text = parkingTimeDisplay
关键修正说明
- 保留解析成功的标记(
isEntryValid/isExitValid),只有当两个时间都有效时才计算时长 - 用
exitTime - entryTime得到TimeSpan对象,这是VB.NET专门用于存储时间间隔的类型 - 格式化
TimeSpan为可读字符串,避免直接输出原始的TimeSpan格式
内容的提问来源于stack exchange,提问作者Asahi
相关产品推荐
相关产品推荐

