将数据库字段转换为时间格式

时间:2010-10-05 09:29:48

标签: asp.net datetime session

我正在尝试将我的字符串设置为一个很好的格式化时间,但数据库中的列未设置为日期/时间字段,无论如何我可以这样做吗?

这是我的查询

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

有什么想法吗?

由于

杰米

5 个答案:

答案 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中正常工作。

alt text

答案 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));