gpt4 book ai didi

c# - 使用 c# 在 ASP.Net 中从 session 中检索 DateTime 和计算 TimeSpan 时出现问题。

转载 作者:太空宇宙 更新时间:2023-11-03 21:58:42 29 4
gpt4 key购买 nike

我将 Datetime 存储在 session 中,如下所述:-

Session["LoggedInTime"] = System.DateTime.Now;

然后我在这样的页面加载中检索此值:-

DateTime _loggedInTime = Convert.ToDateTime(Session["LoggedInTime"]);

我调试了上面的代码,发现到目前为止,_loggedInTIme 显示的是我存储在其中的正确日期。之后我会像这样计算时间跨度:-

TimeSpan elapsedtimespan = System.DateTime.Now.Subtract(_loggedInTime);
int elapsedtime = Convert.ToInt32(elapsedtimespan.TotalSeconds);

我在调试代码时发现,在减去 _loggedInTime = {1/1/0001 12:00:00 AM} 时,我无法获得准确的耗时。

请帮我解决这个问题,因为我不明白为什么 _loggedInTime 在计算 TimeSpan 时会变成 {1/1/0001 12:00:00 AM}。

最佳答案

以下对我来说效果很好。由于您在 _loggedInTime 前加了下划线,我假设您将其声明为页面本身的实例变量。

private DateTime _loggedInTime;

protected void Page_Load(object sender, EventArgs e)
{
if (Session["LoggedInTime"] == null)
Session["LoggedInTime"] = DateTime.Now;

_loggedInTime = Convert.ToDateTime(Session["LoggedInTime"]);

TimeSpan elapsedtimespan = DateTime.Now.Subtract(_loggedInTime);
int elapsedtime = Convert.ToInt32(elapsedtimespan.TotalSeconds);
}

我猜你是在另一个时间计算耗时,而不是像上面的例子那样在 Page_Load 中。

在计算耗时之前,请确保在每次回发时正确加载 session 中耗时。在下一次发回时,_loggedInTime 被重置为 DateTime 的默认值,即 {1/1/0001 12:00:00 AM}。

我认为您对以下设置有所了解。

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["LoggedInTime"] == null)
Session["LoggedInTime"] = DateTime.Now;
_loggedInTime = Convert.ToDateTime(Session["LoggedInTime"]);
}
}

private void ButtonClick(object sender, ImageClickEventArgs e)
{
TimeSpan elapsedtimespan = DateTime.Now.Subtract(_loggedInTime);
int elapsedtime = Convert.ToInt32(elapsedtimespan.TotalSeconds);
}

在这里,我通过在单击按钮时处理回发来演示它。在这种情况下,Page_Load 不会加载 LoggedInTime,并且耗时计算不正确。要解决这个问题,只需删除 Page_Load 中的 IsPostBack if 语句即可。确保每次加载页面时都设置实例变量 _loggedInTime,因此也在回发时设置。

注意:还要检查您是否在服务器场中。如果您使用多个服务器来处理您的请求,但配置了错误的 session 模式(例如,在进程中),那么服务器 A 会将 session 变量存储在其内存中,但是重定向可以由服务器 B 处理,而服务器 B 不知道服务器 A 的内存中 session 存储。

可以在 MSDN 上找到更多信息:

Session-State Modes

在进程中, session 状态是默认的,在服务器场场景中,您可以使用 StateServer 或 SqlServer 替代方案在服务器之间共享 session 状态。或者您可以编写自己的自定义 session 状态提供程序。

关于c# - 使用 c# 在 ASP.Net 中从 session 中检索 DateTime 和计算 TimeSpan 时出现问题。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11167550/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com