VB.NET中AM/PM判断If语句异常:输入2显示PM输入1显示AM
解决VB.NET中AM/PM判断的问题
你的代码出现问题的核心原因是直接对字符串做大小比较,而非将输入的小时转换为数字后再进行数值对比。比如字符串"2"和"12"比较时,会按字符逐个判定:第一个字符'2'的ASCII值大于'1',所以"2"会被判定为大于"12",从而触发PM的分支。
修正后的代码
先把输入的小时文本转换为整数,再做数值层面的判断,同时加入输入有效性验证:
Dim hour As Integer ' 验证小时和分钟输入是否为有效数字 If Integer.TryParse(txtHourEnter.Text, hour) AndAlso Integer.TryParse(txtMinEnter.Text, Nothing) Then If hour < 12 Then lblTimeIn.Text = $"{txtHourEnter.Text}:{txtMinEnter.Text}AM" Else lblTimeIn.Text = $"{txtHourEnter.Text}:{txtMinEnter.Text}PM" End If Else ' 处理非数字等无效输入 lblTimeIn.Text = "请输入有效的时间格式" End If
扩展优化(24小时制转12小时制)
如果需要支持24小时制输入自动转换为12小时制带AM/PM的格式,可以调整逻辑:
Dim hour24 As Integer If Integer.TryParse(txtHourEnter.Text, hour24) Then Dim period As String = If(hour24 < 12, "AM", "PM") ' 把0/24转为12,其他小时取模12 Dim hour12 As Integer = If(hour24 Mod 12 = 0, 12, hour24 Mod 12) lblTimeIn.Text = $"{hour12}:{txtMinEnter.Text}{period}" End If
内容的提问来源于stack exchange,提问作者Asahi
相关产品推荐
相关产品推荐

