首页 新闻 会员 周边

关于DataTime.Now的问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-12-10 21:29

在一个ASP页面中有两个按钮,点击第一个按钮时获取一下当前系统时间,同时使第二个按钮有效。点击第二个按钮时再次获取系统时间并计算两次点击的差值。

问题来了,我在这个页面的.cs文件中设置了两个字段值

DataTime start;
DataTime end;

在两个按钮的消息处理函数中这样写

protected void Button1_Click(object sender, EventArgs e)
{
       start = DataTime.Now;
}

protected void Button2_Click(object sender, EventArgs e)
{
        end = DataTime.Now;
        int h = end.Hour - start.Hour;
        Label1.Text = h.ToString();
}

但是很奇怪的是Lable1的内容永远是第二次点击按钮的当前时刻的小时,Debug发现执行Button2_Click函数时start的数值竟然等于"0001/1/1 0:00:00"!这到底是怎么回事?求高人相助!

飞鸟_Asuka的主页 飞鸟_Asuka | 菜鸟二级 | 园豆:209
提问于:2012-12-10 20:48
< >
分享
最佳答案
0

给你解释一下你的代码:

DataTime start;
DataTime end;
protected void Button1_Click(object sender, EventArgs e)
{
       start = DataTime.Now;
}

protected void Button2_Click(object sender, EventArgs e)
{
        end = DataTime.Now;
        int h = end.Hour - start.Hour;
        Label1.Text = h.ToString();
}

第一次点击的时候,你的start附上了值,
end=datetime.min;
当你第二次点击的时候;
end=now;
start确实datetime.min 这次因为你第2次是当前页面的一个新的对象,跟你第一次的对象完全不同
所以导致了不是你想要的效果
收获园豆:10
chenping2008 | 大侠五级 |园豆:9836 | 2012-12-10 21:12

嗯,道理懂了。那怎么解决能提示下吗?不胜感激!

飞鸟_Asuka | 园豆:209 (菜鸟二级) | 2012-12-10 21:14

把变量设为static似乎能得到想要的结果了,但是这样做是否从原理上是正确的呢?

飞鸟_Asuka | 园豆:209 (菜鸟二级) | 2012-12-10 21:17

@飞鸟_Asuka: 你可以用一个hidden控件来存放start,或者用session,viewstate

chenping2008 | 园豆:9836 (大侠五级) | 2012-12-10 21:18

@chenping2008: 用Hidden控件能解决问题。非常感谢!分数给你了

飞鸟_Asuka | 园豆:209 (菜鸟二级) | 2012-12-10 21:29
其他回答(2)
0

类成员 的生命周期没弄明白

Qlin | 园豆:2403 (老鸟四级) | 2012-12-10 20:52
0

DataTime start;
DataTime end;

原因:当你点击第二个按钮时,start的值在触发事件中已经改变。

解决:把他们都设置成静态的,试试结果怎么样?

伏草惟存 | 园豆:1420 (小虾三级) | 2012-12-10 21:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册