我正在尝试将我的字符串设置为一个很好的格式化时间,但数据库中的列未设置为日期/时间字段,无论如何我可以这样做吗?
这是我的查询
Dim query as String = "Select * from openquery (devbook, 'SELECT wb.arrival_time FROM web_bookings wb ')"
这就是我转换它的地方
Session("formattime") = DateTime.Parse(drv.Row("arrival_time")).ToString("hh:mm")
arrival_time
字段只有4个数字,如此1000
所以我需要一种方法将其转换为一个很好的格式,如10:00AM
我正在使用VB
有什么想法吗?
由于
杰米
答案 0 :(得分:2)
怎么样:
string str = "1000";//drv.Row("arrival_time")
string[] formats = new string[] { "HHmm" };
DateTime dt = DateTime.ParseExact(str, formats,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.AdjustToUniversal);
string strTime = dt.ToShortTimeString();
DateTime dte = DateTime.Now;
IFormatProvider culture = new System.Globalization.CultureInfo("en-GB", true);
<强> VB.NET 强>
Dim str As String = "1000" 'drv.Row("arrival_time")
Dim formats As String() = New String() {"HHmm"}
Dim dt As DateTime = DateTime.ParseExact(str, formats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal)
Dim strTime As String = dt.ToShortTimeString()
Dim dte As DateTime = DateTime.Now
Dim culture As IFormatProvider = New System.Globalization.CultureInfo("en-GB", True)
<强>输出:强>
上午10:00
或者,如果您打算经常使用它,您可能希望将其添加为扩展方法。
public static class Extensions
{
public static string ToTime(this string str)
{
DateTime dt = DateTime.Now;
try
{
string[] formats = new string[] { "HHmm" };
dt = DateTime.ParseExact(str, formats,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.AdjustToUniversal);
}
catch
{ throw new Exception("Invalid data"); }
return dt.ToShortTimeString();
}
}
<强> - VB.NET - 强>
Public NotInheritable Class Extensions
Private Sub New()
End Sub
<System.Runtime.CompilerServices.Extension> _
Public Shared Function ToTime(str As String) As String
Dim dt As DateTime = DateTime.Now
Try
Dim formats As String() = New String() {"HHmm"}
dt = DateTime.ParseExact(str, formats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal)
Catch
Throw New Exception("Invalid data")
End Try
Return dt.ToShortTimeString()
End Function
End Class
示例:强>
string str = "13000";//drv.Row("arrival_time")
string strTime = str.ToTime();
<强> VB.NET 强>
Dim str As String = "13000"
'drv.Row("arrival_time")
Dim strTime As String = str.ToTime()
数据中的任何不良内容都会引发异常。
<强> - 编辑 - 强>
在VB.NET中正常工作。
答案 1 :(得分:0)
日期可能不仅包含小时和分钟。您需要检查到达时间是什么
答案 2 :(得分:0)
我不熟悉VB.NET语法,但我想你可以在到达时间值上使用string.Split()
,将其分成几小时和几分钟,然后将其转换为DateTime。
DateTime.Parse
不会自动意识到这4个数字应该是小时和分钟。
答案 3 :(得分:0)
我假设你的输入时间是24或4小时格式的3或4位数表示,可能有前导空格。然后你可以像这样解析它:
Dim i As Int32
If Int32.TryParse(drv.Row("arrival_time")), NumberStyles.AllowLeadingWhite, CultureInfo.InvariantCulture, i) Then
Dim hours As Int32 = i\100
Dim minutes As Int32 = i Mod 100
Dim ts As new TimeSpan(hours, minutes, 0)
Dim dt As DateTime = DateTime.Now.Date + ts
Session("formattime") = dt.ToString("hh:mm tt", CultureInfo.InvariantCulture)
Else
' Handle invalid time
End If
DateTime.Parse
并且朋友无法解析一小时内只有一位数的时间字符串,因此这种方法。使AM / PM正确并不容易,因此委托给DateTime
类。
答案 4 :(得分:0)
看看这个 http://blog.stevex.net/parsing-dates-and-times-in-net/
和
http://msdn.microsoft.com/en-US/library/8kb3ddd4.aspx
如果你需要冒号,并且可以保证你的DB字段总是返回一个包含4个字符的字符串,你可以做这样的事情来获得正确格式的时间。
string e = "1000"; // from db.
string t = string.Format("{0}:{1}", e.Substring(0, 2), e.Substring(2, 2));