我正在做一个"在线提醒系统"项目(ASP.NET2.0(C#)/SQLServer2005)

因为这是一个提醒服务,将在特定日期向用户发送邮件.但问题是,用户不是来自特定的国家,而是来自世界各地,来自不同的时区.现在,当我注册时,我询问用户的时区,就像windows在安装时询问我们的时区一样.

但是如果用户 Select 了(+5.30)或某个时区,那么如何在我的asp中处理这个时区,我没有得到答案.net应用程序.如何根据时区工作.

请建议是否有更好的方法来处理这个应用程序中的时区??

谢谢

推荐答案

首先要确定你的数据在哪个时区.我建议您确保存储的任何日期时间都存储在UTC时间(使用DateTime.ToUniversalTime()来获取它).

当您要为用户存储提醒时,您将需要当前的UTC时间,添加或删除用户的时区差异,并将该新时间转换回UTC;这就是您希望存储在数据库中的时间.

然后,当您想要判断要发送的提醒时,您只需根据UTC时间在数据库中查找要立即发送的提醒;基本上,所有的提醒时间戳都在DateTime.Now.ToUniversalTime()之前.

Update和一些实施细节:

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("<the time zone id>");
// May 7, 08:04:00
DateTime userDateTime = new DateTime(2009, 5, 7, 8, 4, 0);
DateTime utcDateTime = userDateTime.Subtract(tzi.BaseUtcOffset);

Asp.net相关问答推荐

由于 Blazor Change Detection API,组件重新渲染被跳过.如何避免?

如何在asp.net中单击按钮的新选项卡中打开页面?

如何异步渲染局部视图

System.Net.Http 版本冲突导致构建警告

ASP.Net Core MVC - 自定义属性的客户端验证

MvcBuildViews true 与 ASP.NET MVC 2 中的实体框架

无法使用单例Microsoft.AspNetCore.Hosting.Internal.HostedServiceExecutor中的范围服务MyDbContext

ASP.NET 中的多选下拉列表

使用 Asp.Net MVC 和 Web Api 配置 Ninject

为 ASP.NET Core MVC 显示 404 Not Found 页面

如何验证用户在 CheckBoxList 中 Select 了至少一个复选框?

通过 ASP.NET/C# 使用 Plupload

如何在 ASP.NET 中设置下拉列表项?

为什么 HttpWebRequest 会抛出异常而不是返回 HttpStatusCode.NotFound?

global.asax 中的 Application_Error 未捕获 WebAPI 中的错误

Docker 中的 ASPNETCORE_ENVIRONMENT

在 ASP.NET MVC 中模拟 User.Identity

为什么 Controls 集合不提供所有 IEnumerable 方法?

~/ 等价于 javascript

为什么 C# 对于 CSC 文件会遇到此错误?