求一解法:不規則輸入轉換為規則時間

rockyvan 2008-03-07 04:50:51
問題描述:
在DatagridView某欄是錄入時間的,格式如:08:30:05。
現在用戶要求:
輸入8、12,能顯示成08:00:00、12:00:00;
輸入830、1230,能顯示成08:30:00、12:30:00。
當然,還有其它可能情況,就不儸嗦了,搞出上面2种情況,其它的就可以舉一反三了。
只求思路和解法,不求代碼。如果有代碼參考更好。
使用工具VB2005。
...全文
55 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
rockyvan 2008-03-07
  • 打赏
  • 举报
回复
版主的方法可行,把>"12"改>"24",再修改下其它細節就可以用了。
謝謝了!也同時謝謝其他各位!
rockyvan 2008-03-07
  • 打赏
  • 举报
回复
版主的方法可行,把>"12"改>"24",再修改下其它細節就可以用了。
謝謝了!也同時謝謝其他各位!
qiu5208 2008-03-07
  • 打赏
  • 举报
回复
if number>=100 then

number=number\100 '整除100,去掉后两为数。
hour=number
muninte=30
esle
hour=number

end if
水如烟 2008-03-07
  • 打赏
  • 举报
回复
试试
    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
Dim value As String = showtime("113")
Console.WriteLine(value)
End Sub


Private Function showtime(ByVal part As String) As String
Dim mtime As String = part.Trim
Dim len As Integer = mtime.Length

If len = 0 Then Return "00:00:00"

If Not IsNumeric(mtime) Then Throw New Exception

If len = 1 Then
mtime = part.PadRight(5, "0"c)
Else
If mtime.Substring(0, 2) > "12" Then
mtime = part.PadRight(5, "0"c)
Else
mtime = part.PadRight(6, "0"c)
End If
End If

Return Format(Integer.Parse(mtime), "00:00:00")
End Function
harryheart 2008-03-07
  • 打赏
  • 举报
回复
Module Module1

Sub Main()
Console.WriteLine(FormatTime("080503"))
Console.ReadKey()


End Sub

public function FormatTime(str as String) as String
Dim sb As New System.Text.StringBuilder
Dim tmp As Integer
For i As Integer = 0 To str.Length - 1
tmp = Convert.ToInt32(str.Substring(i, 2))
If (i = 0) Then
If (CheckHour(tmp, sb)) Then
i = i + 1
End If
ElseIf CheckTime(tmp, sb) Then
i = i + 1
End If
Next i

Return sb.ToString()
End Function
Public Function CheckHour(ByVal hour As Integer, ByVal strReturn As System.Text.StringBuilder) As Boolean
Dim isValid = True
If (hour > 23) Then
strReturn = strReturn.Append("0").Append(hour / 10)
isValid = False
Else
If (hour > 10) Then
strReturn = strReturn.Append(hour)
Else
strReturn = strReturn.Append("0").Append(hour)
End If
End If
Return isValid
End Function

Public Function CheckTime(ByVal time As Integer, ByVal strReturn As System.Text.StringBuilder) As Boolean
Dim isValid = True
If (time > 23) Then
strReturn = strReturn.Append(":0").Append(time / 10)
isValid = False
Else
If (time > 10) Then
strReturn = strReturn.Append(":").Append(time)
Else
strReturn = strReturn.Append(":0").Append(time)
End If
End If
Return isValid
End Function

End Module
很久没写VB了,今天服务器让人很晕
qiu5208 2008-03-07
  • 打赏
  • 举报
回复
if number>=100 then

number=number\100 '整除100,去掉后两为数。
hour=number
muninte=30
esle
hour=number

end if
qiu5208 2008-03-07
  • 打赏
  • 举报
回复
if number>=100 then

number=number\100 '整除100,去掉后两为数。
hour=number
muninte=30
esle
hour=number

end if
rockyvan 2008-03-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lzmtw 的回复:]
有点麻烦,比如:123,你说是01:23:00呢,还是12:03:00
[/Quote]
從純數學的角度考慮確實麻煩,會出現這種不好判斷的局面。
据我了解的情況,他們一般輸入的數據當中只會出現整點或半點的時間,即:要麽1,要麽130,要麽12,要麽1230。
但是他們就是不想全部輸完6位數字和冒號,我也是很鬱悶,誰叫他們是用戶呢。
harryheart 2008-03-07
  • 打赏
  • 举报
回复
C#代码,VB版的找大虾改下了~
static string FormatTime(string str)
{
StringBuilder sb = new StringBuilder();
int tmp;
for (int i = 0; i < str.Length; i++)
{
tmp = int.Parse(str.Substring(i, 2));
if (i == 0)
{
if (CheckHour(tmp, sb))
{
i++;
}
}
else
{
if (Check(tmp, sb))
{
i++;
}
}

}return sb.ToString();
}
static bool CheckHour(int hour, StringBuilder builder)
{
bool isValid = true;
if (hour > 23)
{
builder.Append("0").Append(hour / 10);
isValid = false;
}
else
{
if (hour < 10)
builder.Append("0").Append(hour);
else
builder.Append(hour);
}
return isValid;
}

static bool Check(int time, StringBuilder builder)
{
bool isValid = true;
if (time > 59)
{
builder.Append("0").Append(time / 10);
isValid = false;
}
else
{
if (time < 10)
builder.Append(":0").Append(time);
else
builder.Append(":").Append(time);
}
return isValid;
}
调用string str=FormatTime("080503");
输出08:05:03
另外最好自己加上异常处理
水如烟 2008-03-07
  • 打赏
  • 举报
回复
有点麻烦,比如:123,你说是01:23:00呢,还是12:03:00
harryheart 2008-03-07
  • 打赏
  • 举报
回复
每次读两位
如果是合法的(小时小于12,分秒小于60),就写入,不合法就只读一位写入

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧