2012-05-13 35 views
-1

我的网络服务器位于东海岸。 我在东部时间下午4点PST时间从我的网络服务器发送了一封电子邮件。 我住在西海岸,当我看到页面时,它显示4PM,这是我的未来时间。如何在Web应用程序中处理日期?

我怎样才能看到1PM,在东海岸4PM等有人?

日期存储在UTC的MongoDB中。我在显示之前还转换日期:

@Model.DateSent.ToLocalTime().ToString(); 

这是我设置的时间发送邮件:

DateTime.UtcNow <-- So I am storing date in UTC already 

感谢

回答

1

有两个部分你的问题。首先是在C#中本地化dateTime的机制。由于我不是Windows用户,因此我会将其留给别人回答,或者您要查看文档,但我敢打赌,ToLocalTime()有一位朋友需要TimeZone或Locale 。

第二部分,更有趣,以及过去我不得不面对的一些问题是如何知道使用什么时区。有没有正确的答案,但也有一些策略:

  • 最简单的,也许是最好的,如果有你的用户帐户 的系统概念是简单地让语言环境的用户偏好。
  • 如果没有用户帐户的概念,一个总是登录到有几种方法 去
    • ,你可以把它被保存在会话中的选择,但是这是一个有点讨厌 迫使他们选择每次
    • 一个更好的选择可能是对入站IP地址进行地理编码,并将其设置为 。有地理编码应用程序,数据库和服务。成本最高,但我知道 MaxMind有一个免费版,确实没问题。这将主要工作。用户通过一些大型专用网络来访问的是 。我住在费城附近。我的家 网络通常地理编码相当好,虽然有一些服务将我放在我的ISP所在的特拉华州, 。但在工作中,整个公司通过 单个网络代理出去,我看起来像在北达科他州。
    • 更可靠,但也许更多参与的方法是使用Javascript中的getTimezoneOffset()获取浏览器的时区 ,并将答案推送到服务器。
  • 我想其他的选择可能是时间局部转换在浏览器中, 其中时区是自由availiable,但是这意味着数据是 下来通过AJAX或类似内容,然后通过JavaScript进行更新。如果 您正在做一个基本上基于Ajax RIA的应用程序,只需以UTC或time_t发送数据 即可。但对于尚未处理所有数据客户端的经典网络应用程序 来说有点愚蠢和烦人。

我的第一选择是用户偏好。如果这不是一个选项,我可能会推送来自客户端的时区。如果这涉及太多,请进行IP地理定位。

相关问题