2015-06-18 7 views
1
<asp:Label ID="timeLabel" runat="server" Text='<%# Eval("time") %>' /> 

В этом утверждении «время» является типом данных времени в моей базе данных. Он отображается как 16:00:00. Я пытаюсь показать это как 16:00. Я думаю, что это довольно прямолинейно, если я работал с datetime datatype, но как я могу преобразовать это в datetime (использовать форматирование {HH.mm tt}) или иначе отображать с AM/PM время.Показывать время в формате AM/PM в DataList

ответ

1

Поскольку T-SQL time сопоставляется с TimeSpan в стороне CLR, когда вы получите это значение из базы данных, он будет TimeSpan, не DateTime.

И вы не можете представлять TimeSpan с номерами AM или PM. Это только для DateTime представлений. Нет такой вещи, как TimeSpan; 4 час промежуток времени. Это не имеет смысла, не так ли?

Ближайший вещь может быть, получить это значение из базы данных и добавить его в DateTime.Today значения с Add(TimeSpan) method перегрузки. Затем вы можете получить его строковое представление с помощью метода .ToString("h:mm tt") с культурой, которая не содержит AMDesignator и PMDesignator в виде пустой строки.

Шаг за шагом;

  1. Получить time как TimeSpan из вашей базы данных.
  2. Получить DateTime с помощью метода DateTime dt = DateTime.Today.Add(time).
  3. Показать это строковое представление с dt.ToString("h:mm tt", CultureInfo.InvariantCulture)
+0

Не могли бы вы добавить время на произвольную дату без времени компоненты (например, 'DateTime.Today'), а затем отформатировать его, используя только компоненты времени (например,' чч: мм tt')? –

+0

@ Cᴏʀʏ Обновление той же идеи, когда вы написали свой комментарий. Это самые близкие вещи, чтобы получить ИМО. Также я думаю, что «h» было бы лучше, так как выглядит, что OP не имеет начального нуля для одиночных цифр. –

0

Я решил этот с SQL вместо C# здесь. Я попытался добавить TimeSpan к DateTime в аргументе Eval(), но я продолжал получать исключение FormatException. Кроме того, выражение получилось нелепым.

Я попробовал этот

<asp:Label ID="timeLabel" runat="server" Text='<%# DateTime.Today.Add(TimeSpan.Parse(Eval("time").ToString())).ToString("h:mm tt") %>' /> 

и этот

<asp:Label ID="timeLabel" runat="server" Text='<%# Eval(DateTime.Today.Add(TimeSpan.Parse("time")).ToString("h:mm tt")) %>' /> 

Это было значительно проще изменить запрос, чтобы использовать

SELECT CONVERT(varchar, [time], 100) AS [time] 

Я доволен этим результатом. Хотя, мне было бы интересно узнать, был ли я на правильном пути с выражениями C#. Большое спасибо за ввод.

0
<%#DateTime.Today.Add((TimeSpan)(Eval("Event_From_Time"))).ToString("H:mm tt")%> 
+0

Не могли бы вы добавить какое-то объяснение в свой ответ? Кодовые ответы не одобряются на SO. – honk

 Смежные вопросы

  • Нет связанных вопросов^_^