Microsoft . 技术之路...

—— 专注于微软技术, 分享是快乐的源泉......
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

如何将GridView绑定的时间列显示为本地时间

Posted on 2007-09-14 08:53  赣江源  阅读(716)  评论(0编辑  收藏  举报
数据库中保存为 UTC 格式的 “时间”,BIND 到 GRIDVIEW 中后, 如何显示为本地格式的时间?
可以在RowDataBound的时候,将时间从GMT转成Local如下:

   protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        // Convert UTC to local times (DateTime field is column 1)
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DateTime TempDateTime;

            // convert text in GridView cell to DateTime
            TempDateTime = DateTime.Parse(e.Row.Cells[1].Text);
           
            // convert UTC to LocalTime
            TempDateTime = TempDateTime.ToLocalTime();

            // replace text in GridView cell
            e.Row.Cells[1].Text = TempDateTime.ToString();
        }
    }

如果希望在事件中处理问题.也可以在Gridview中加入一个Templet的列,然后在在其中加入一个Label 然后对显示的text 内容进行处理 如下。

<asp:Label ID="lbl1" runat="server" Text=<%# System.DateTime.Parse(DataBinder.Eval(Container.DataItem, "LastModified").ToString() + " GMT") %> ></asp:Label>

最后还有一种方法就是直接在返回的DataTable中进行处理,通过循环将所有的GMT时间转成当前的时间,来解决此问题。不过如果是这么处理的话,如果需要对数据update的话需要特别留意,需要先将本地时间再转回到GMT时间,然后插入到数据库中。

其实在系统中保存的时间格式使用的一直都是UTC,所以Local的时间一般只是用于显示的时候。所以RowDataBound的时候,将UTC的时间格式通过ToLocalTime()方法转换为当地时间,这个做法就是比较标准的方法了。因为这样作能够很好的将显示层与数据层区分开,当需要把时间写回到DataSet的时候再次将时间在转为UTC时间。

如果这样依旧不能很好的满足您的需求的话,建议您可以重载GridView控件,当遇到DateTime类型的数据时,自动执行DateTime.toLocalTime()的方法,以达到显示本地时间的目的,然后当修改数据的时候,再使用toUTCTime()方法,将时间转换为UTC时间从新写回到数据库中。