【问题标题】:How to make my ASP.net web application know what time it is at the user's location?如何让我的 ASP.net Web 应用程序知道用户所在位置的时间?
【发布时间】:2013-03-04 16:03:47
【问题描述】:

我正在开发一个 Web 应用程序,用于跟踪我的组织的日程安排。有超过 100 个不同的官方位置可以使用它。当用户登录时,用户的物理位置会保存在会话中。

应用程序上有一个用户可以点击的按钮。我有一个要求,当用户单击按钮时,应用程序必须记录它在用户物理位置的时间。

我知道将应用程序设计为在内部使用 UTC 可能是有意义的,但该程序多年来一直使用本地时间。但是,到目前为止,我看不到有人做过任何需要使用当前时间(日期除外)的事情。

我可以在我的数据库中看到每个位置都有一个应该对应于时区的“区域设置 ID”,但我知道在如何考虑“夏令时”和“夏令时”方面存在差异世界各地。

考虑所有这些因素的有效方法是什么,以便当用户在 100 个位置中的一个登录时,当他单击按钮时,我可以知道用户的实际位置是什么时候?

【问题讨论】:

  • 你说你知道用户的位置。你对它了解多少?经纬度从手机坐标?在您的应用程序中建立的方式中的一些物理数据?要进行时区转换,您需要来自 .Net 中的 TimeZoneInfo 类或像 NodaTime 这样的 TZDB 实现的一些时区信息。唯一的问题是如何确定用户的时区。
  • 您可以为时区保存单独的表...因为每个用户都有时区...您可以轻松找到他们的时间...使用时区偏移量...只需添加偏移量到你的服务器时间..
  • @Daniel - 如果您可靠地知道位置,您可以预设或确定时区。然后你就开始做生意了。

标签: asp.net time timezone


【解决方案1】:

我想我已经弄清楚了。到目前为止,我能够在至少一个我测试过的位置验证此解决方案。

我提到的“本地 ID”与您可以传递给各种 .net 时区函数(例如 TimeZoneInfo.ConvertTimeBySystemTimeZoneId)的字符串相同。这个函数似乎足以获取用户所在位置的当地时间。

你们中的一些人在 cmets 中提出了一个很好的观点,即用户欺骗系统的动机可能如何发挥作用,但我相信我的解决方案无论如何都有效。

【讨论】:

  • 啊——我误会了。您说的是“语言环境”,所以我认为您的意思是 en-US。是的 - 如果您对每个用户都有一个实际的 Windows 时区 ID,那么您可以简单地使用 TimeZoneInfo 类进行转换。
【解决方案2】:

您无法保证它是正确的,但您可以使用 javascript(通过调用 new Date())检索浏览器认为的日期和时间,然后使用 AJAX 将该值发布到服务器 - 从在那里,做任何你需要做的事情。

从用户的角度来看,这个日期很有可能是正确的。

【讨论】:

  • 对不起,乔,但我完全不同意你的看法。你永远不能相信用户的时钟。您可以尝试使用jsTimeZoneDetect 之类的东西检测时区,并将其与NodaTime 之类的TZDB 实现配对,但即使这样也是有风险的,因为您不知道用户是否正确设置了他们的时区。
  • 如果我想不出别的办法,那可能是我的后备位置,但我认为我的客户不会喜欢它!
  • @Joe - 如果您能与my talk at DCC 聊天,那就太好了
  • 为了记录,我说你不能保证它是正确的,而且很有可能它是正确的。这些都是真实的陈述 - 无法确定用户的日期是什么,但由于您谈论的是业务用户,您可能可以相信您的用户在他们的机器上拥有正确的时间,假设您的 IT 部门知道他们的时间正在做。如果错了,他们只会伤害自己。
  • @MattJohnson 话虽如此,我可能会在您的会议上停下来 - 约会是一件令人头疼的事情,所以我很想看看您使用了哪些类型的解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-09-05
  • 2011-11-25
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
相关资源
最近更新 更多