2017-09-05 43 views
0

我正在開發一個Web應用程序,它是基於Visual Basic 6的以前的桌面版本的過渡。我必須在支持票證系統中顯示票證第一次到達時的時間,第一次被處理等Asp.Net中的時間格式化問題

我遇到了一些問題,當時間格式化,因爲我似乎必須使用幾種不同的方法來取得我想要取決於輸入,現在我很困惑,因爲我什麼時候應該使用每。

例如,使用系統DateNow時候才能以小時,分鐘和秒的答案這工作得很好:

Strings.Format(Date.Now, "HH:mm:ss") 

但我在數據庫中的字符串值,存儲在一個特定的方式和我不能修改數據庫,使其擁有時間戳字段,我希望將其存儲起來,時間,分鐘和秒鐘一起縮短,因爲13h,57mins,20secs以字符串「135720」結尾。如果我嘗試,我得到了相同的

Dim info as string="135720" 
Strings.Format(val(info),"HH:mm:ss) 

答案是實際格式化「HH:MM:SS」,而不是十三點57分20秒我的預期。 但如果我在.net中使用VB6轉換功能:

Microsoft.VisualBasic.Format(Val(Info), "##:##:##") 

它工作得很好。 我也必須使用Microsoft.VisualBasic.Format在嘗試修復使用部分時間(如「1357」或只是「135」)將錯誤存儲的字符串修復爲「13:57:00」或「13:50:00」時「使用基於字符串長度的大小寫選擇。

但我真的不希望在應用程序中使用舊的編程語言,因爲我並沒有最終理解新的工作方式以及我如何廣泛地查看文檔,沒有更聰明的人。

我也期待中日comunity但並沒有真正發現無論是在這樣的問題的答案: Is there a way to programmatically convert VB6 Formatting strings to .NET Formatting strings?

A regular expression to validate .NET time format

Time format of datetime field in .net

Time format in asp.net page

任何幫助尋找新我應該這樣做,爲什麼會大大降低。

謝謝

回答

1

您可以使用TimeSpan。

此函數將從您的字符串值中返回一個TimeSpan。

Public Function GetTimeSpan(s As String) 
    Dim span As TimeSpan 
    s = s.Trim 'Trim spaces 

    'Check if string only contains numbers and if length is valid, else throw exception 
    If System.Text.RegularExpressions.Regex.IsMatch(s, "^[0-9]+$") AndAlso 
     s.Length >= 3 AndAlso 
     s.Length <= 6 Then 

     s = s.PadRight(6, "0") 
    Else 
     Throw New Exception("Invalid String!") 
    End If 

    TimeSpan.TryParseExact(s, "hhmmss", Globalization.CultureInfo.InvariantCulture, span) 

    Return span 
End Function 

而且使用這樣的:

MessageBox.Show(GetTimeSpan("135700").ToString) 
MessageBox.Show(GetTimeSpan("135").ToString) 
+0

完美,時間跨度的世界將解決懸而未決的許多問題。非常感謝,這正是我所期待的。 只是建議任何人使用它,修剪你的ingoing字符串閃避意想不到的長度結果:) –

+1

添加'修剪'和正則表達式檢查僅數字。 – MatSnow

+1

再次更有用的是,我一直在使用instr()和.replace函數,它們遠沒有regex那麼強大。謝謝 –