在 ASP:GridView BoundField 中以 UTC 格式显示日期



我正在尝试使用GridView来显示DateTime值。 到目前为止,我已经能够使用以下我想要的格式字符串显示数据:

<asp:GridView ID="myGrid" ... >
    <Columns>
        <asp:BoundField DataField="myField" DataFormatString={0:MM/dd/yyyy hhmmss} ... />
        ...
    </Columns>
    ...
</asp:GridView>

我现在遇到的问题是,这总是显示为当地时间。 我的用户希望它始终显示为 UTC,无论他们身在何处。 有没有办法强制GridView显示 UTC 时间,而不是本地时间?

例如,我发现在 vb.net 中,要将字符串转换为日期,我可以告诉它使用通用时间:

Dim myDateAsString as String = "03/31/2014 19:00"
Dim myDate as DateTime = DateTime.ParseExact(myDateAsString, "MM/dd/yyyy HH:mm", System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.AssumeUniversal)

我正在寻找类似于在asp中设置GridView时可以使用的.AssumeUniversal部分。

我希望我要问的是清楚的。 如果没有,我可以尝试详细说明,如果有人让我知道什么不清楚。


更新:

我的GridView DataSource是一个DataSet,由一个SELECT查询填充,该查询只是从我的数据库中提取数据。 由于我在这里感兴趣的字段是我数据库中的DateTime字段,因此我假设当它被分配为DataSource时,它仍然是一个DateTime。 这是对的吗?

在我看来,与填充GridView有关的唯一代码是

myGrid.DatqaSource = mySQLObject.sel_from_table(vars)
myGrid.DataBind()

mySQLObject.sel_from_table(vars)将返回如上所述的DataSet。 到目前为止的答案表明,我需要将数据更改为 UTC,然后再将其发送到GridView - 应该在哪里/如何完成? 我是否必须以某种方式在查询中更改它? 还是在我将其指定为DataSource之前DataSet

网格视图只是一种显示机制。它将以指定的格式显示您传递的任何值。如果要更改值本身(UTC 日期),则 2 个选项是:

  1. 模板项,您可以在其中调用 Eval 选项来计算 UTC 日期。
  2. 更改 myField 服务器端的值,以便网格视图可以绑定该值,例如在您的 SQL 查询结果中。

无论哪种方式,您的服务器端代码都需要将日期转换为UTC(ToUniversalTime()或DateTime.UtcNow等)并将其发送以进行显示。

以下是使用模板字段的方法。

在您的 ASPX 中

<asp:TemplateField HeaderText="My Fields">
    <ItemTemplate>
        <asp:Label runat="server" text='<%# GetUtcFormattedDate((DateTime)Eval("myField")) %>' />
    </ItemTemplate>
</asp:TemplateField>

在代码隐藏中,可以有一个静态方法

public static string GetUtcFormattedDate(DateTime date)
{
 return date.ToUniversalTime().ToString(YOUR_DATE_FORMAT_STRING);
}

您可以在查询中将时间转换为 UTC,以便从数据库中提取数据。

在您的选择子句中,只需使用以下内容。

SELECT DATEADD (HH, 'Your UTC Offset', DateYouWantSelected)

相关内容

  • 没有找到相关文章

最新更新