-1

我的网络服务器在东海岸。我在太平洋标准时间下午 1 点(东部时间下午 4 点)从我的网络服务器发送了一封电子邮件。我住在西海岸,当我看到页面时,它显示下午 4 点,这对我来说是未来的时间。

我怎样才能看到下午 1 点、下午 4 点在东海岸的某个人等等?

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

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

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

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

谢谢

4

1 回答 1

1

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

第二部分更有趣,过去我不得不处理几次是如何知道要使用哪个时区。没有正确的答案,但有一些策略:

  • 如果您的系统中有用户帐户的概念,那么最简单,也许是最好的方法就是简单地将语言环境设置为用户首选项。
  • 如果没有始终登录的用户帐户的概念,则有几种方法可以使用
    • 您可以将其设置为保存在会话中的选择,但是每次都强制他们选择有点烦人
    • 更好的选择可能是对入站 IP 地址进行地理编码并从中进行设置。有地理编码应用程序、数据库和服务。大多数成本,但我知道 MaxMind 有一个免费的版本可以。这将主要工作。问题是用户通过一些大型专用网络来。我住在费城附近。我的家庭网络通常可以很好地进行地理编码,尽管一些服务将我置于我的 ISP 所在的特拉华州。但是在工作中,整个公司都通过一个网络代理出去,我看起来就像在北达科他州。
    • 更可靠,但可能更复杂的是,getTimezoneOffset()在 Javascript 中使用浏览器的时区并将答案推送到服务器。
  • 我想另一种选择可能是在浏览器中本地转换时间,其中时区是免费可用的,但这意味着数据是通过 AJax 或类似方式下降,然后通过 JavaScript 更新。很好,如果您正在开发一个基本上基于 Ajax RIA 的应用程序,只需以 UTC 格式或 time_t 格式发送数据。但是对于一个尚未处理所有数据客户端的经典网络应用程序来说,这有点愚蠢和烦人。

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

于 2012-05-13T02:39:38.887 回答