我有一个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。
答案 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 有更好的答案。基本上,您要么必须执行以下操作之一 -