在ASP中显示UTC的日期:GridView BoundField

时间:2014-03-31 19:03:05

标签: asp.net datetime datagridview visual-web-developer-2010

我尝试使用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)

我正在寻找类似.AssumeUniversal部分的内容,当我在asp中设置GridView时,我可以使用它。

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


更新:

我的DataSource的{​​{1}}是GridView,由DataSet查询填充,该查询只从我的数据库中提取数据。由于我感兴趣的字段是我的数据库中的SELECT字段,因此我认为当它被指定为DateTime时仍然是DateTime。这是对的吗?

在我看来,与填充DataSource相关的唯一代码是

GridView

myGrid.DatqaSource = mySQLObject.sel_from_table(vars) myGrid.DataBind() 将返回mySQLObject.sel_from_table(vars),如上所述。到目前为止的答案表明我需要在将数据发送到DataSet之前将数据更改为UTC - 在哪里/应该如何进行?我必须以某种方式在我的查询中更改它吗?或者在GridView之前将其指定为DataSet

2 个答案:

答案 0 :(得分:1)

网格视图仅仅是一种显示机制。它会以您指定的格式显示您传递的任何值。如果要更改值本身(Utc Date),则有两个选项:

  1. 模板项,您可以在其中调用Eval选项来计算Utc日期。
  2. 更改myField服务器端的值,以便网格视图可以绑定它。例如在您的SQL查询结果中。
  3. 无论哪种方式,您的服务器端代码都需要将日期转换为UTC(ToUniversalTime()或DateTime.UtcNow等)并将其发送以进行显示。

    以下是使用TemplateField的方法。

    在你的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);
    }
    

答案 1 :(得分:0)

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

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

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