为了账号安全,请及时绑定邮箱和手机立即绑定

如何在ASP.NET中使用时区?

如何在ASP.NET中使用时区?

MM们 2019-11-28 12:49:01
我正在研究“在线提醒系统”项目(ASP.NET 2.0(C#)/ SQL Server 2005)因为这是一个提醒服务,它将在特定日期将邮件发送给用户。但是问题在于用户不是来自特定国家,而是来自世界各地和不同时区。现在,当我注册时,我要求用户的时区与Windows在安装时要求我们的时区相同。但是我没有得到如果用户选择(+5.30)或某个时区,那么如何在我的asp.net应用程序中处理该时区。如何根据时区工作。并请提出在此应用程序中是否有更好的方法来处理时区?谢谢
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

到目前为止,所有答案的问题在于它们没有考虑Prashant试图实现的目标。如果夏令时更改前一天其系统的用户的偏移量为+12并为第二天设置了提醒,则本应触发该提醒的用户的偏移量将改为+13。

这就是为什么您只能将当前偏移量用于当前发生的事情。尽管我与其他所有人都同意,但服务器端所有时间(除了可能仅用于显示的时间)都应存储在UTC中。


查看完整回答
反对 回复 2019-11-28
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

第一件事是确保数据位于哪个时区。我建议确保将您存储的任何DateTime存储在UTC时间中(使用DateTime.ToUniversalTime()来保存它)。


当要为用户存储提醒时,您将需要当前的UTC时间,添加或删除用户的时区差,然后将新时间转换回UTC。这就是您要存储在数据库中的内容。


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


更新一些实现细节:您可以从TimeZoneInfo.GetSystemTimeZones()方法中获取时区列表;您可以使用这些时间显示用户的时区列表。如果Id从选定的时区存储属性,则可以从中创建一个TimeZoneInfo类实例,并为给定的本地日期/时间值计算UTC时间:


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);


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 777 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信