我尝试使用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
?
答案 0 :(得分:1)
网格视图仅仅是一种显示机制。它会以您指定的格式显示您传递的任何值。如果要更改值本身(Utc Date),则有两个选项:
无论哪种方式,您的服务器端代码都需要将日期转换为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)