在GridView中显示本地时间

时间:2013-02-01 12:05:18

标签: asp.net gridview databound

我有一个asp.net gridview绑定到以下sql server 2008r2数据源:

<asp:SqlDataSource ID="dsFault" runat="server" DataSourceMode="DataSet" 
 ConnectionString="<%$ ConnectionStrings:ESBExceptionDb %>"
SelectCommand="select * from Fault order by datetime desc"></asp:SqlDataSource>

在我的Fault表中有一个名为DateTime的列,类型为datetime。存储在此列中的值是UTC格式,我需要它们显示在浏览器的本地时区

我已将模板字段添加到网格视图的Columns集合中,如下所示:

<asp:TemplateField>
  <ItemTemplate>
   <asp:Label ID="lblLocalTime" runat="server" 
    Text='<%# String.Format("{0:f}", Eval("DateTime").ToLocalTime()) %>'>
   </asp:Label>
  </ItemTemplate>    
</asp:TemplateField>

当我浏览页面时,我收到以下错误:

CS1061: 'object' does not contain a definition for 'ToLocalTime' and no
extension method 'ToLocalTime' accepting a first argument of type 'object' 
could be found (are you missing a using directive or an assembly reference?)

有谁能告诉我哪里出错了?

谢谢,Rob。

5 个答案:

答案 0 :(得分:2)

从您的数据库返回的Eval("DateTime") 不是C#DataTime对象。

并且因为函数.ToLocalTime()属于DateTime c#对象,所以无法使用它。

您需要将对象转换为字符串,然后使用函数.ToLocalTime()

<asp:TemplateField>
  <ItemTemplate>
   <asp:Label ID="lblLocalTime" runat="server" 
    Text='<%# Convert.ToDateTime(Eval("DateTime")).ToLocalTime() %>'>
   </asp:Label>
  </ItemTemplate>    
</asp:TemplateField>

您将其转换为DateTime对象,您可以使用任何可用的格式

例如

Text='<%# Convert.ToDateTime(Eval("DateTime")).ToString("dd/MM/yyyy") %>'

答案 1 :(得分:1)

除了其他答案之外,请记住ToLocalTime()将返回SERVER本地时间而不是您请求的浏览器本地时间。

答案 2 :(得分:0)

试试这个

<%# Eval("DateTime", "{0:T}")%>

<asp:Label ID="lblLocalTime" runat="server" 
    Text='<%# Eval("DateTime", "{0:T}")%>'>
   </asp:Label>

答案 3 :(得分:0)

这样就可以了!试一试。

<asp:TemplateField HeaderText="Account Created">
   <ItemTemplate>
      <asp:Label ID="lblLocalTime" runat="server" 
         Text='<%# Convert.ToDateTime(Eval("CreateDate", "{0:g}")).ToLocalTime() %>'>
      </asp:Label>
   </ItemTemplate>    
</asp:TemplateField>

答案 4 :(得分:0)

看起来没有干净简单的方法可以做到这一点,奇怪!!。到目前为止提到的答案尝试将日期转换为服务器时区,而不是客户端/浏览器的时区。即如果服务器在美国而客户端在印度,您将看不到印度时区的日期时间,它将在美国。

其中一个 duplicate 有更好的答案。基本上,您要么必须执行以下操作之一 -

  • 将客户端时区信息发送到服务器并在那里进行适当的转换。最好发送时区名称而不是时区偏移量,因为时区偏移量可能因夏令时而异。您可以使用 Intl.DateTimeFormat().resolvedOptions().timeZone 发送时区名称。
  • 将 UTC 日期字符串发送到 客户端并让它使用 javascript(new 日期(ISOUTCDateString))。这就是 WCF 中发生的事情。