【问题标题】:Display Local Time in GridView在 GridView 中显示本地时间
【发布时间】:2013-02-01 12:05:18
【问题描述】:

我有一个 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>

在我的故障表中有一个名为 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?)

谁能告诉我哪里出错了?

谢谢,罗伯。

【问题讨论】:

    标签: asp.net gridview databound


    【解决方案1】:

    从您的数据库返回的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") %>'
    

    【讨论】:

    • 谢谢!我绞尽脑汁,我知道有这么简单的解决方案。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这样试试

      &lt;%# Eval("DateTime", "{0:T}")%&gt;

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

      【讨论】:

        【解决方案4】:

        这样就可以了!试试这个。

        <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>
        

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-08-30
            • 2010-10-17
            • 1970-01-01
            • 2022-06-10
            • 1970-01-01
            • 1970-01-01
            • 2011-12-23
            • 1970-01-01
            相关资源
            最近更新 更多