代码之家  ›  专栏  ›  技术社区  ›  Jamie Taylor

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

  •  0
  • Jamie Taylor  · 技术社区  · 14 年前

    我正试图使我的字符串格式良好的时间,但在数据库中的列没有设置为日期/时间字段,反正我可以这样做吗?

    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 回复  |  直到 14 年前
        1
  •  2
  •   Kamran Khan    14 年前

    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();
        }
    }
    

    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();
    

    Dim str As String = "13000"
    'drv.Row("arrival_time")
    Dim strTime As String = str.ToTime()
    

    数据中的任何错误都会引发异常。

    --编辑--

    在工作中很好VB.NET版.

    alt text

        2
  •  0
  •   Shiraz Bhaiji    14 年前

        3
  •  0
  •   Nellius    14 年前

    我不熟悉VB.NET版语法,但我想你可以用 string.Split() 在到达时间值上,将其拆分为小时和分钟,然后将其转换为日期时间。
    DateTime.Parse 不会自动意识到这4个数字应该是小时和分钟。

        4
  •  0
  •   Dave    14 年前

    看看这个 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));
    
        5
  •  0
  •   Martin Liversage    14 年前

    我假设您的输入时间是3或4位数字,表示24小时格式的时间,可能有前导空格。然后可以这样解析:

    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 朋友们也不能解析只有一个数字的时间字符串,因此这种方法。把上午/下午的事情做好并不容易,所以这是委托给 DateTime 班级。