1

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

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

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

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

谢谢,罗伯。

4

5 回答 5

2

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

并且因为该函数.ToLocalTime()属于DateTimec# 对象,所以您不能使用它。

您需要将对象转换为字符串,然后使用该函数.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") %>'
于 2013-02-01T12:26:50.420 回答
2

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

于 2013-05-29T09:22:16.427 回答
0

像这样试试

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

<asp:Label ID="lblLocalTime" runat="server" 
    Text='<%# Eval("DateTime", "{0:T}")%>'>
   </asp:Label>
于 2013-02-01T12:26:42.290 回答
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>
于 2013-05-04T07:00:23.943 回答
0

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

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

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