Преобразовать поле базы данных в формат времени - PullRequest
0 голосов
/ 05 октября 2010

Я пытаюсь сделать мою строку хорошо отформатированным временем, но столбец в базе данных не настроен как поле даты / времени. В любом случае, я могу это сделать?

Вот мой запрос

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 ]

2 голосов
/ 05 октября 2010

Как насчет:

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: 00AM

В качестве альтернативы, если вы планируете использовать это часто, вы можете добавить его в качестве метода расширения.

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

0 голосов
/ 05 октября 2010

Посмотрите на это http://blog.stevex.net/parsing-dates-and-times-in-net/

и

http://msdn.microsoft.com/en-US/library/8kb3ddd4.aspx

Если вам нужно двоеточие там, и вы можете гарантировать, что ваше поле БД всегда будетвернув строку из 4 символов, вы можете сделать что-то подобное, чтобы получить время в нужном формате.

string e = "1000"; // from db.
string t = string.Format("{0}:{1}", e.Substring(0, 2), e.Substring(2, 2));
0 голосов
/ 05 октября 2010

Я не знаком с синтаксисом VB.NET, но думаю, что вы можете просто использовать string.Split() для значения времени прибытия, разделить его на часы и минуты, а затем преобразовать его в DateTime.
DateTime.Parse автоматически не поймет, что эти 4 числа должны быть часами и минутами.

0 голосов
/ 05 октября 2010

Я предполагаю, что введенное вами время представляет собой 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, и друзья не смогут анализировать строки времени только с одной цифрой за час, следовательно, этот подход.Правильно настроить AM / PM непросто, поэтому его делегируют классу DateTime.

0 голосов
/ 05 октября 2010

Дата может содержать больше, чем просто часы и минуты.Вам необходимо проверить время прибытия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...