如何在Web应用程序中处理日期?

时间:2012-05-13 02:04:38

标签: asp.net-mvc-3 c#-4.0 mongodb

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

我怎样才能看到下午1点,东海岸4PM等人?

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

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

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

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

由于

1 个答案:

答案 0 :(得分:1)

您的问题分为两部分。第一个是在C#中本地化dateTime的机制。由于我不是Windows用户,我会将其留给其他人来回答,或者你要查看文档,但我愿意打赌ToLocalTime()有一个朋友带有TimeZone或Locale

第二部分,更有趣,以及过去几次我必须处理的事情是如何知道使用什么时区。没有正确的答案,但有一些策略:

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

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